我正在为iphone / ipad构建通用,我已经将部署目标设置为3.0。它可以在iPad 3.2和iphone 4.1上运行良好。但是,当我在iPod 3.1.3上构建并运行它时,运行时会自动选择iPad代码路径并告诉我它找不到UIPopOverController和UIMenuItem。在我的iPhone路径代码中,我没有使用类似的东西。
它构建成功,只有在尝试运行时才会出错,并且无法找到:
dyld: Symbol not found: _OBJC_CLASS_$_UIPopoverController
Referenced from: /var/mobile/Applications/My_APP
Expected in: /System/Library/Frameworks/UIKit.framework/UIKit
编辑:
如果我删除所有iPad类并将App.info主nib包设置为仅限iphone。然后,它运作良好。我认为问题是它运行的是iPad代码。我不知道我的iPod或我的项目有什么问题
答案 0 :(得分:2)
您需要为3.1.3上不存在的类进行运行时测试。你不能拥有像[UIPopoverControler alloc]这样的代码,你必须弱化框架。
查看这个问题的答案:
(问题与你的不同,但根本问题是相同的。)
或者这篇文章:
http://cocoawithlove.com/2010/07/tips-tricks-for-conditional-ios3-ios32.html
答案 1 :(得分:1)
如果您只是想绕过编译时问题,因为该设备永远不会出现问题代码,那么您可以通过这种方式调用popover等类:
Class infopopclass = NSClassFromString(@"UIPopoverController");
if(infopopclass) {
id infopop = [[infopopclass alloc] initWithContentViewController:myPopViewController];
[infopop presentPopoverFromRect:CGRectMake(20, 70, 10, 10) inView:self.view permittedArrowDirections:4 animated:YES];
}