iphone - iPad 模拟器 (4.3) 崩溃并出现 dyld 错误

标签 iphone objective-c ios cocoa-touch ipad

我在 iPad 模拟器 (4.3) 中运行的应用程序由于缺少符号错误而崩溃:

dyld: Symbol not found: _OBJC_CLASS_$_NSMetadataQuery
  Referenced from: /Users/Me/Library/Application Support/iPhone Simulator/4.3.2/Applications/B13BE6DF-61B9-4C23-98E7-BEC72330FF19/iPad.app/iPad
  Expected in: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/Foundation.framework/Foundation
 in /Users/Me/Library/Application Support/iPhone Simulator/4.3.2/Applications/B13BE6DF-61B9-4C23-98E7-BEC72330FF19/iPad.app/iPad

此错误是在启动过程中的什么时候发生的?我似乎实际上没有执行任何代码——我在两个将实例化此类的位置都放置了断点(当版本 < 5.0 时从不执行) 和委托(delegate)方法 applicationWillFinishLaunching:

但是,崩溃发生在任一点被击中之前。

我知道潜在的问题是 NSMetadataQuery 类是在 iOS 5.0 中添加的,但我当然希望保持与早期版本的向后兼容性。 (我正在使用正确的 NSClassFromString 调用。)

我有一个在 iOS 5.0 上使用 NSMetadataQuery 的 iPhone 应用程序,如果运行 4.3 或更低版本则跳过它,并在模拟器中正常工作。因此,我对这个特定程序崩溃的原因感到困惑。

NSMetadataQuery 类是否真的存在于 iOS 4.2 和 4.3 的 iPhone 版本中,但不存在于 iPad 版本中? (而且 API 直到 iOS 5.0 才公开?)

最佳答案

潜在的问题是 Foundation 框架在应用程序的 iPad 版本(崩溃)中是强链接的,而在 iPhone 版本中是弱链接的。 (这允许 iPhone 版本在链接时不需要这些类的情况下运行。当然,在 iPhone 模拟器的 4.X 版本上调用/实例化任何这些类也会类似地崩溃。)

通过将 Foundation.framework 的依赖项选项从 必需 更改为 可选 来解决问题(在 Xcode 的项目信息下)。

关于iphone - iPad 模拟器 (4.3) 崩溃并出现 dyld 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8394079/

相关文章:

iphone - JSON 响应 iPhone App 的非空验证

iphone - iOS 6.0 上的 MFMessageComposeController 中 UIButton 为 nil

iphone - 如何使 ios 设置包(PreferenceLoader)中的特定单元格变灰?

ios - Swift Framework - 公共(public)类结果为未声明的类型

iphone - 是否有现成的公式可以从 iPhone 3GS 加速度计的 X/Y/Z 获取俯仰/滚动值?

iphone - 为小型固定大小的 UITableView 禁用单元格重用

iphone - 在单键 NSMutableDictionary 下添加两个对象

iphone - 整个应用程序中的单个动画 UIImageView 背景

iphone - glGenLists 和 iOS

iphone - 在 iOS 5 上禁用字幕会在屏幕上保留最后显示的字幕文本