我在使用UIPopoverController作为iPad版本的通用应用程序上工作。 (基本SDK和部署目标都是iOS 4.3)
当我使用iPhone模拟器(版本4.3)测试iPad和iPhone的条件代码路径时,弱链接和NSClassFromString(@"UIPopoverController")
方法都不会产生预期的行为。
在测试UIKit框架的弱链接时,我确保使用LLVM 2.1编译器,并在'Target-> Build Phases-> Link Binary with Libraries'中使UIKit框架'可选'。 (据我所知,是在Xcode 4.1中实现它的方法)。
运行代码
if ([UIPopoverController class]) {
...
_popover = [[UIPopoverController alloc] initWithContentViewController:controller];
...
}
iPhone模拟器上的崩溃了应用程序,表明[UIPopoverController class]
没有返回nil
。将[UIPopoverController class]
替换为NSClassFromString(@"UIPopoverController")
以上会导致同样的崩溃。
有人知道如何在模拟器上运行时使这些条件检查有效吗?
答案 0 :(得分:0)
UIPopoverController类作为iOS启动版本3.2的一部分存在,因此它不应该在任何具有iOS版本4.x甚至iPhone的设备上返回nil,只有iOS版本具有iOS 3.1.3及以下版本才能通过弱(可选)链接获得nil。要确定是否可以使用此类,请尝试使用userInterfaceIdiom建议上述解决方案。
答案 1 :(得分:-2)
尝试确定代码是否在iPad上运行
如果是,您可以安全地使用UIPopoverController
。
- (BOOL)isPad
{
if ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)])
{
return ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad);
}
else
{
return NO; // all iPad OS's implement -userInterfaceIdiom
}
}