1

我正在为 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 Main nib bundle 设置为仅限 iphone。然后,它运作良好。我认为问题在于它运行 iPad 代码。我不知道我的 iPod 或我的项目出了什么问题

4

2 回答 2

2

您需要对 3.1.3 中不存在的类进行运行时测试。你不能有任何像 [UIPopoverControler alloc] 这样的代码,你必须弱链接到框架。

查看此问题的答案:

即使 iPad 尚未运行 iOS 4,我应该如何构建一个包含 iOS 4 功能的通用 iOS 应用程序?

(问题与您的不同,但根本问题是相同的。)

或者这篇文章:

http://cocoawithlove.com/2010/07/tips-tricks-for-conditional-ios3-ios32.html

于 2010-10-08T11:38:10.863 回答
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];
}
于 2010-10-08T13:15:48.650 回答