Apple советует использовать следующий код, чтобы определить, работает ли на iPad или iPhone/iPod Touch:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// The device is an iPad running iPhone 3.2 or later.
// [for example, load appropriate iPad nib file]
}
else {
// The device is an iPhone or iPod touch.
// [for example, load appropriate iPhone nib file]
}
Проблема заключается в том, что UI_USER_INTERFACE_IDIOM() и UIUserInterfaceIdiomPad НЕ определены в SDK до 3.2. Это, похоже, полностью разрушает цель такой функции. Их можно только компилировать и запускать на iPhone OS 3.2 (iPhone OS 3.2 можно запускать только на iPad). Поэтому, если вы можете использовать UI_USER_INTERFACE_IDIOM(), результат всегда будет указывать на iPad.
Если вы включите этот код и целевую ОС 3.1.3 (самую последнюю iPhone/iPod Touch OS), чтобы проверить свой универсальный код приложения iPhone, вы получите ошибки компилятора, так как символы не определены в 3.1. 3 или ранее, при компиляции для iPhone 3.1.3.
Если это рекомендуемый по-умолчанию подход к обнаружению устройства во время работы, что я делаю неправильно? Кто-нибудь преуспел в использовании этого подхода к обнаружению устройства?