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
类型的对象传递了消息 -libraryCompletionHandler
。 NSNumber
没有 -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模拟器上的“无法识别的选择器”崩溃的主要内容,如果未能解决你的问题,请参考以下文章