【问题标题】:How to make a universal app (iPad and iphone 4.1) runs on iPod 3.1.3如何使通用应用程序(iPad 和 iphone 4.1)在 iPod 3.1.3 上运行
【发布时间】:2010-10-08 10:05:34
【问题描述】:

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

【问题讨论】:

标签: iphone ios4 universal-binary


【解决方案1】:

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

查看此问题的答案:

How should I approach building a Universal iOS app that will include iOS 4 features, even though the iPad doesn't yet run iOS 4?

(问题和你的不同,但根本问题是一样的。)

或者这篇文章:

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

【讨论】:

  • +1 用于分享链接。但我认为这不是我的问题。我已经尝试检查 iOS4 属性,我认为我的问题是 Xcode 自动将我的 iPod 检测为 iPad 设备并为其运行 iPad 代码
  • 您能否更新您的问题以显示您如何决定是运行 ipad 代码还是 iphone 代码? xcode 不会为您处理这些问题,您必须手动检查并加载正确的 nib 等,例如使用 [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
  • 你试过通用应用吗?它通过指定第一个窗口在 Info.plist 文件中确定。我刚刚为 iPhone 指定了 MainWidow_iPhone.xib,为 iPad 指定了 MainWindow_iPad.xib。我在 iPhone 4.0 和 iPad 3.2 上测试过,效果很好,只有 iPod 3.1.3 有问题
  • 是的,我已经编写了通用应用程序。我认为问题是你没有做我在回答中指出的上述事情之一。您需要弱链接程序集,您需要间接调用类。它将在 iphone 4 上运行,因为 UIPopoverController 存在于 iphone 4 上,因此您的代码将正常链接。在 ipod 上,您无法链接,因此您一定是在做上述错误之一。链接器不关心代码路径,它只是尝试链接您的代码引用的所有内容(无论该代码是否会运行),因此您必须弱链接并间接调用。
  • 哼,听起来很对。我会仔细检查。感谢您的回答
【解决方案2】:

如果您只是想解决编译时问题,因为该设备永远不会处理有问题的代码,那么您可以通过这种方式调用弹出框等类:

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];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 2010-12-26
    • 2014-12-04
    • 2011-10-07
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    相关资源
    最近更新 更多