苹果建议使用以下代码来检测是否在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在3.2之前的SDK中没有被定义。这似乎完全违背了这样一个函数的目的。它们只能在iPhone OS 3.2上编译和运行(iPhone OS 3.2只能在iPad上运行)。因此,如果你使用UI_USER_INTERFACE_IDIOM(),结果将始终指示为iPad。如果你包含这段代码并针对OS 3.1.3目标(最近的iPhone / iPod Touch OS)来测试你的iPhone绑定的通用应用程序代码,当编译iPhone模拟器3.1.3时,你将会得到编译器错误,因为这些符号在3.1.3或更早版本中没有被定义。
如果这是苹果公司推荐的运行时设备检测方法,那么我做错了什么?有人成功地使用这种设备检测方法吗?