iPad模拟器(4.3)因dyld错误而崩溃

时间:2011-12-06 01:06:41

标签: 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)和委托方法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?)

1 个答案:

答案 0 :(得分:2)

潜在的问题是Foundation框架在应用程序的iPad版本中有很强的关联(崩溃)并且在iPhone版本中链接很弱。 (这允许iPhone版本在链接时不需要这些类就可以运行。当然,在4.X版本的iPhone模拟器上调用/实例化这些类也会同样崩溃。)

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