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 没有在 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 绑定的通用应用程序代码,您将收到编译器错误,因为符号未在 3.1.3 或更早版本中定义,为 iPhone 模拟器 3.1.3 编译时。
如果这是 Apple 推荐的运行时设备检测方法,我做错了什么?有没有人成功使用这种方法进行设备检测?