“无法识别的选择器发送到实例”错误是什么意思?

时间:2011-03-01 09:32:48

标签: objective-c objective-c-runtime

由于以下错误,我的应用程序崩溃了:

-[NSCFString count]: unrecognized selector sent to instance 0x612b060

有人可以告诉我这是什么意思吗?如何在我的代码中找到参考号为0x612b060的行

6 个答案:

答案 0 :(得分:5)

您正在对一个对象(可能是一个集合,例如数组,字典或集合)调用count方法,该对象已发布或尚未初始化。

答案 1 :(得分:3)

您正在NSCFString上发送消息“count”,意味着在NSString数据类型上调用“count”方法。

要查找代码,您可以使用堆栈跟踪,但我确定您正在做的是:

在NSArray或(Array数据类型)上分配NSString数据并尝试计数。

答案 2 :(得分:2)

很有可能发生这种情况是因为你有一个你没有正确保留的集合对象(例如NSArray,NSDictionary)。

尝试使用NSZombies查找已释放的对象。

  1. 右键单击Xco​​de中可执行文件组中的可执行文件。选择Get Info
  2. 选择参数选项卡。
  3. Variables to be set in the environment中创建一个名为NSZombieEnabled的变量,并将其值设置为YES。别忘了激活它。
  4. 打开断点并运行代码。
  5. 调试器会指向早期发布的对象。
  6. 完成此问题的调试后,您应该停用NSZombies。 NSZombies不会释放任何内存,只是将对象标记为已释放 所以你迟早会在记忆中发出警告 您只需删除它前面的复选标记即可停用NSZombies。

答案 3 :(得分:0)

您的意思是在您的字符串上调用length吗?

答案 4 :(得分:0)

也许有人会需要这个: 当我遇到这种问题时,我用过: [ myarray retain];myarray = [NSArray arrayWithObjects: ...]; 它起作用了。我想这是因为我的阵列太早破坏了自己。 但我不知道我现在怎么能释放这个物体? 只是[myarray autorelease]?保留是否有相反的东西?

答案 5 :(得分:0)

一个实际的例子:

有时候,我还没有明确地理解其中的实际差异。 valueForKey在SOGo-3.1.4代码中尝试调用不可用的"方法" ASProtocolVersion对象上的context

`EXCEPTION: <NSException: 0x55f43f93e4d0> NAME:NSInvalidArgumentException REASON:-[WOContext ASProtocolVersion]: unrecognized selector sent to instance

objectForKey有效(并且是在代码中查询context对象的常用方法)。

请参阅https://github.com/inverse-inc/sogo/pull/217/files