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) для тестирования кода универсального приложения для iPhone, вы получите ошибки компилятора, поскольку символы не определены в 3.1. 3 или ранее, при компиляции для симулятора iPhone 3.1.3.
Если это рекомендуемый Apple подход к обнаружению устройств во время выполнения, что я делаю не так? Кому-нибудь удалось использовать этот подход к обнаружению устройств?