我在我的应用中遇到了这种奇怪的崩溃,当我尝试在我的对象上调用此函数 pageModel
[pageModel pageTitle] isEqualToString:@"some text"];
这是调试器转储
-[__NSArrayM isEqualToString:]: unrecognized selector sent to instance 0x661de40
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM isEqualToString:]: unrecognized selector sent to instance 0x661de40'
并乱搞调试器我发现了一些非常奇怪的行为
(gdb) po pageModel
<PXPage: 0x6622e20>
(gdb) po [pageModel pageTitle]
<__NSArrayM 0x661de40>(...
(gdb) po pageModel.pageTitle
<__NSArrayM 0x661de40>(...
它认为这是一个MutableArray,但事实并非如此。它应该是一个NSString ...而另一些时间它是UIImage,其他时间是其他东西等等。 有谁知道这里发生了什么?
由于
答案 0 :(得分:5)
这是一个经典的双重发布错误。对象已被释放太多次,它占用的内存已分配给另一个对象,因此其他对象正在接收用于旧对象的消息。
您希望在方案编辑器中将NSZombieEnabled
环境变量设置为YES
,并在调试器中运行您的应用程序。 Google和/或stackoverflow搜索可以帮助您找到有关此内容的更多信息。
答案 1 :(得分:-1)
[pageModel pageTitle]返回数组。您正在使用NSString类。这是崩溃的原因。所以检查[pageModel pageTitle]的数据类型。