我在 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/