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

oni*_*a87 2 iphone objective-c ipad ios

当我尝试在我的对象pageModel上调用此函数时,我在我的应用程序中遇到了这种奇怪的崩溃

[pageModel pageTitle] isEqualToString:@"some text"];
Run Code Online (Sandbox Code Playgroud)

这是调试器转储

-[__NSArrayM isEqualToString:]: unrecognized selector sent to instance 0x661de40
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM isEqualToString:]: unrecognized selector sent to instance 0x661de40'
Run Code Online (Sandbox Code Playgroud)

并且搞乱调试器我发现了一些非常奇怪的行为

(gdb) po pageModel
<PXPage: 0x6622e20>

(gdb) po [pageModel pageTitle]
<__NSArrayM 0x661de40>(...

(gdb) po pageModel.pageTitle
<__NSArrayM 0x661de40>(...
Run Code Online (Sandbox Code Playgroud)

它认为这是一个MutableArray,但事实并非如此.它应该是一个NSString ...而另一些时间它是UIImage,其他时间是其他东西等等.有谁知道这里发生了什么?

谢谢

Mik*_*ler 5

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

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