指针指向不同的对象:(无法识别的选择器发送到实例)

时间:2011-08-12 09:45:10

标签: iphone objective-c ios ipad

我在我的应用中遇到了这种奇怪的崩溃,当我尝试在我的对象上调用此函数 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,其他时间是其他东西等等。 有谁知道这里发生了什么?

由于

2 个答案:

答案 0 :(得分:5)

这是一个经典的双重发布错误。对象已被释放太多次,它占用的内存已分配给另一个对象,因此其他对象正在接收用于旧对象的消息。

您希望在方案编辑器中将NSZombieEnabled环境变量设置为YES,并在调试器中运行您的应用程序。 Google和/或stackoverflow搜索可以帮助您找到有关此内容的更多信息。

答案 1 :(得分:-1)

[pageModel pageTitle]返回数组。您正在使用NSString类。这是崩溃的原因。所以检查[pageModel pageTitle]的数据类型。