我的应用中出现以下崩溃日志错误:
-[NSNull length]: unrecognized selector sent to instance 0x194adc8
我怎么读这个?这是否意味着:
NSNull
”对象发送了“长度”消息?NSNull
”类中的“length”方法崩溃了?此外,如果它是前一个选项,我如何获得堆栈跟踪以查看哪个函数导致此崩溃?该顶行是我日志中唯一的错误。
由于
答案 0 :(得分:5)
门1
NSNull
无法回复length
您可以查看NSNull的文档,了解是否属实。
如果不知道你的代码库在做什么,我不知道在哪里看,你必须在某个时候调用[NSNull null];
来获取NSNull
对象,或者你正在某个地方使用框架返回这个。
答案 1 :(得分:2)
这意味着您向NSNull发送了'length',而NSNull没有'length'功能。
启用NSZombies可能会对你有所帮助(它会保留被解除分配的对象,以便它可以告诉你你试图访问哪个对象)但我认为在这种情况下你可能在某个时候将对象设置为NSNull(或者它是从功能)。
无论如何打开NSZombies,转到Project>编辑Active Executable>参数选项卡>然后添加一个名为NSZombieEnabled的变量并将值设置为YES。确保在完成后将其关闭,因为它可能会导致内存问题。
答案 2 :(得分:1)
这意味着您使用Length方法计算字符串长度
像 如果([strText Length]> 0) { //在这做点什么---- } 其他 { //在这里做点事 - }
所以在上面的情况下 - strText是NSNull然后肯定会发生崩溃并且GDB将显示如下消息: [NSNull length]:无法识别的选择器发送到实例
如上所述,Null没有长度方法。
救援: 首先检查: if((NSNull *)strText == [NSNull null]) { return strText = @“”; } 这将防止NSNULL崩溃
答案 3 :(得分:0)
僵尸在这种情况下无济于事。正如Paul.s所说,NSNull是一个有效的对象。应用程序停止时,您应该获得堆栈跟踪。您是否打开了调试器窗格?确保它是。我很确定Xcode 4总是在堆栈跟踪的异常上停止。如果由于某种原因你还没有看到它,如果你在(gdb)提示符下,你可以输入'bt'(backtrace)来获取跟踪。
答案 4 :(得分:0)
因为您正在比较NSNull类与长度之前检查
if ([NSString *str isKindOfClass:[NSNull null]]){
str=@"";
}
然后检查str的长度。
它有效!thx