我正在开发一款能够在iPad和iPhone上运行的通用应用。 Apple iPad文档说使用UI_USER_INTERFACE_IDIOM()
来检查我是否在iPad或iPhone上运行,但我们的iPhone是3.1.2并且不会定义UI_USER_INTERFACE_IDIOM()
。因此,此代码中断了:
//iPhone should not be flipped upside down. iPad can have any
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return YES; //are we on an iPad?
} else {
return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
}
}
在Apple的SDK Compatibility Guide中,他们建议执行以下操作来检查函数是否存在:
//iPhone should not be flipped upside down. iPad can have any
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if(UI_USER_INTERFACE_IDIOM() != NULL &&
UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return YES; //are we on an iPad?
} else {
return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
}
}
这样可行,但会导致编译器警告:“指针和整数之间的比较。”在挖掘之后,我发现我可以使编译器警告消失,并使用以下强制转换为(void *)
:
//iPhone should not be flipped upside down. iPad can have any
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if((void *)UI_USER_INTERFACE_IDIOM() != NULL &&
UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return YES; //are we on an iPad?
} else {
return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
}
}
我的问题是:这里的最后一个代码块是否正常/可接受/标准练习?我无法通过快速搜索找到其他任何人做这样的事情,这让我想知道我是否错过了陷阱或类似的东西。
感谢。
答案 0 :(得分:6)
您需要针对3.2 SDK构建适用于iPad的应用。因此它将正确构建,UI_USER_INTERFACE_IDIOM()宏仍然可以工作。如果你想知道如何/为什么,请在文档中查找 - 它是一个#define,编译器将理解它并编译成可在3.1(等)上正确运行的代码。