0

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

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

谁能告诉我这是什么意思以及如何在我的代码中找到引用 0x612b060 的行

4

6 回答 6

5

您正在调用count已释放或尚未初始化的对象(可能是集合,例如数组、字典或集合)的方法。

于 2011-03-01T09:37:36.700 回答
3

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

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

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

于 2011-03-01T09:38:33.433 回答
2

这很可能是因为您有一个没有正确保留的集合对象(例如 NSArray、NSDictionary)。

尝试使用 NSZombies 找到被释放的对象。

  1. 在 Xcode 的 Executables 组中右键单击可执行文件。选择Get Info
  2. 选择参数选项卡。
  3. Variables to be set in the environment创建一个名为的变量NSZombieEnabled并将其值设置为YES. 不要忘记激活它。
  4. 打开断点并运行您的代码。
  5. 调试器会将您指向提前发布的对象。

调试完这个问题后,你应该停用 NSZombies。NSZombies 不会释放任何内存,它只是将对象标记为已释放。
因此,您迟早会收到内存警告。
您可以简单地删除它前面的复选标记来停用 NSZombies。

于 2011-03-01T09:40:46.910 回答
0

你的意思是调用length你的字符串吗?

于 2011-03-01T10:49:58.110 回答
0

也许有人会需要这个:当我遇到这种问题时,我使用了: [ myarray retain]; 之后 myarray = [NSArray arrayWithObjects: ...]; 并且它起作用了。我认为这是因为我的阵列过早地破坏了自己。但我不知道我现在怎样才能释放这个对象?只是[myarray autorelease]?有什么相反的东西可以保留吗?

于 2011-09-13T09:27:00.953 回答
0

一个实际的例子:

有时,有一个我还不清楚的实际差异。valueForKey在 SOGo-3.1.4 的代码中没有工作,试图ASProtocolVersioncontext对象上调用一个不可用的“方法”:

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

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

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

于 2016-07-20T12:06:45.120 回答