IOS 7模拟器上的“无法识别的选择器”崩溃

Posted

技术标签:

【中文标题】IOS 7模拟器上的“无法识别的选择器”崩溃【英文标题】:"unrecognized selector" crash on IOS 7 simulator 【发布时间】:2013-09-13 11:26:58 【问题描述】:

我正在通过在 Xcode 5 iPhone 模拟器 (ios7) 上运行我的音乐应用程序在 IOS7 上的兼容性来测试它,但它在使用以下代码检索所有音乐项目时崩溃。

    MPMediaQuery *allSongs = [[MPMediaQuery alloc] init];
    NSArray *itemsFromGenericQuery = [allSongs items]; // Here application crashes

崩溃日志:

[__NSCFNumber libraryCompletionHandler]: unrecognized selector sent to instance 0xdd66840

这是崩溃时正在运行的线程的快照:

我怀疑 Xcode5 中存在一些错误..!

编辑:我可以在模拟器/设备上使用 Xcode 4.6.3 运行相同的应用程序,而不会出现任何问题/崩溃。

【问题讨论】:

那又怎样?模拟器没有 iPod 库。在真实设备上运行它会发生什么? 我使用模拟器/设备在 Xcode4.6.3 上运行相同的应用程序,它运行时没有任何崩溃。之间,我没有 ios7 的设备,所以不知道它在真实设备上的结果。 为什么我被否决了。我把所有可能的细节都放在了我的问题上,并试图尽可能地清楚。 【参考方案1】:

[__NSCFNumber libraryCompletionHandler]: unrecognized selector sent to instance 0xdd66840

此错误表示 NSNumber 类型的对象传递了消息 -libraryCompletionHandlerNSNumber 没有 -libraryCompletionHandler 方法,因此会崩溃。显然,有什么不好的事情发生了。

这通常表示演员阵容不佳或僵尸。在这种情况下,我会怀疑是僵尸对象。

恭喜,您可能在 iOS 7 模拟器中发现了一个缺陷。呜呜!

【讨论】:

我使用 NSZombieEnabled 标志进行调试,但我仍然遇到同样的崩溃。我不认为这是因为僵尸,因为我在第一个 VC 中的 viewdidload 中只写了这两行代码,然后我就崩溃了。 @subh.singh 在乐器中使用僵尸。产品 > 配置文件,然后选择跟踪模板“僵尸”。我的运气要好得多。同样,我不认为这是您的代码,我认为这是 Apple 的代码。【参考方案2】:

我怀疑 Xcode5 中存在一些错误..!

Xcode 5 的开发者预览版显然存在一些错误,但听起来是您的应用程序崩溃了,而不是 Xcode 或模拟器本身。这会让人们相信问题更可能出在您的应用中,或者可能出在操作系统中。

[__NSCFNumber libraryCompletionHandler]: unrecognized selector sent to instance 0xdd66840

错误的指针是无法识别的选择器错误的常见原因,尤其是当它们涉及的类似乎与崩溃的代码无关时。 Turn on NSZombieEnabled 和 set a breakpoint on all exceptions 追踪问题。

【讨论】:

我将我的代码移到了-viewDidLoad(第一个 VC),我确实建议了调试更改,但我仍然遇到同样的崩溃。如果我在 Xcode 4.6.3 中运行相同的代码,它不会产生任何问题。所以我认为这个崩溃不是因为应用程序(不是因为僵尸对象),而是由于 Xcode5。【参考方案3】:

可能是项目设置 尝试添加-ObjC

【讨论】:

以上是关于IOS 7模拟器上的“无法识别的选择器”崩溃的主要内容,如果未能解决你的问题,请参考以下文章

ios 7无法识别的选择器发送到实例

当用户触摸注释时,无法识别的选择器崩溃

IOS 7无法识别的选择器发送到带有按钮的实例问题

发送到 Core Data 的无法识别的选择器导致应用程序崩溃

无法识别的选择器发送到实例 NSArrayM [关闭]

由于 MKPointAnnotation 上无法识别的选择器导致崩溃