由于以下错误,我的应用程序崩溃:
-[NSCFString count]: unrecognized selector sent to instance 0x612b060
谁能告诉我这是什么意思以及如何在我的代码中找到引用 0x612b060 的行
由于以下错误,我的应用程序崩溃:
-[NSCFString count]: unrecognized selector sent to instance 0x612b060
谁能告诉我这是什么意思以及如何在我的代码中找到引用 0x612b060 的行
您正在调用count
已释放或尚未初始化的对象(可能是集合,例如数组、字典或集合)的方法。
您在 NSCFString 上发送消息“count”,意味着在 NSString 数据类型上调用“count”方法。
要查找代码,您可以使用堆栈跟踪,但我确定您正在做的是:
在 NSArray 或(Array 数据类型)上分配 NSString 数据并尝试计数。
这很可能是因为您有一个没有正确保留的集合对象(例如 NSArray、NSDictionary)。
尝试使用 NSZombies 找到被释放的对象。
Get Info
Variables to be set in the environment
创建一个名为的变量NSZombieEnabled
并将其值设置为YES
. 不要忘记激活它。调试完这个问题后,你应该停用 NSZombies。NSZombies 不会释放任何内存,它只是将对象标记为已释放。
因此,您迟早会收到内存警告。
您可以简单地删除它前面的复选标记来停用 NSZombies。
你的意思是调用length
你的字符串吗?
也许有人会需要这个:当我遇到这种问题时,我使用了:
[ myarray retain];
之后
myarray = [NSArray arrayWithObjects: ...];
并且它起作用了。我认为这是因为我的阵列过早地破坏了自己。但我不知道我现在怎样才能释放这个对象?只是[myarray autorelease]
?有什么相反的东西可以保留吗?
一个实际的例子:
有时,有一个我还不清楚的实际差异。valueForKey
在 SOGo-3.1.4 的代码中没有工作,试图ASProtocolVersion
在context
对象上调用一个不可用的“方法”:
`EXCEPTION: <NSException: 0x55f43f93e4d0> NAME:NSInvalidArgumentException REASON:-[WOContext ASProtocolVersion]: unrecognized selector sent to instance
而objectForKey
有效(并且是context
在代码中的其他位置查询对象的常用方法)。