我正在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)和委托方法applicationWillFinishLaunching:
但是,崩溃发生在任何一个点被击中之前。
我知道底层问题是在iOS 5.0中添加了NSMetadataQuery
类,但我当然希望保持与早期版本的向后兼容性。 (我正在使用正确的NSClassFromString
来电。)
我有一个在iOS 5.0上使用NSMetadataQuery
的iPhone应用程序,如果运行4.3或更低版本,则跳过它,并在模拟器中正常运行。因此,我对这个特定程序崩溃的原因感到困惑。
iOS版4.2和4.3的iPhone版本中是否存在NSMetadataQuery
类,而iPad版本中是否存在? (并且直到iOS 5.0才公开API?)
答案 0 :(得分:2)
潜在的问题是Foundation
框架在应用程序的iPad版本中有很强的关联(崩溃)并且在iPhone版本中链接很弱。 (这允许iPhone版本在链接时不需要这些类就可以运行。当然,在4.X版本的iPhone模拟器上调用/实例化这些类也会同样崩溃。)
通过更改(在Xcode中的项目信息下)Foundation.framework
从必需到可选的依赖选项来解决问题。