[__NSArrayM insertObject:atIndex:]:对象不能为零 - 如何确定错误在哪里?

时间:2012-12-18 09:06:08

标签: objective-c ios nsarray null nserror

我有异步事件的大项目,有时我有错误 [__ NSArrayM insertObject:atIndex:]:object不能为nil , 但我不知道在哪里抛出这个错误..我怎么能抓住这个错误?我在我操作insertobject的所有地方都设置断言:atIndex并且没有..

这是堆栈:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '***    -[__NSArrayM insertObject:atIndex:]: object cannot be nil'


*** First throw call stack:

(0x34c352a3 0x32f4597f 0x34b7f8d9 0xc48db 0xc3ced 0xc3b41 0x1178d9 0x148aed 0x103cfd    0x102fc9 0x101f95 0x35f25595 0x35f7a13b 0x35f7a081 0x35f79f65 0x35f79e89 0x35f795c9 0x35f794b1 0x35f67b93 0x35f67833 0xd820b 0x35fc8275 0x3604aea9 0x326efa6f 0x34c0a5df 0x34c0a291 0x34c08f01 0x34b7bebd 0x34b7bd49 0x350b82eb 0x35f5a301 0x62e45 0x62de0)

libc++abi.dylib: terminate called throwing an exception

4 个答案:

答案 0 :(得分:47)

检查代码崩溃位置的好方法是:

1)转到Xcode中的断点选项卡。

2)点击底部的“+”按钮。

3)添加异常断点

a)在中断选项卡中选择:

  i) on Throw 

  ii) on Catch 

并构建和r 未

4)这些断点将准确地为您提供应用程序在90%的时间内崩溃的位置。

希望这会对你有所帮助。 :)

答案 1 :(得分:3)

有时如果你找不到它抛出的异常。只需尝试在项目中添加这些symbolic breakpoints即可。然后运行

 objc_exception_throw 
 malloc_error_break
 [NSException raise]

Xcode转到Product -> Debug -> Create Symbolic Breakpoint。在Symbol中输入上面提到的每个断点,然后按Done,或者您也可以转到左下角的Breakpoint navigator (cmd + 6)创建+符号,然后点击+ 1}}然后Add symbolic breakpoint。现在尝试运行,它会让你到达崩溃的特定线。

答案 2 :(得分:0)

认为您需要处理Array中的null值。 它为我工作 类似的东西:

if ( array ! = nil ) {
    NSLog(@"name is nil");
} else {
    // addobject to array 
}

答案 3 :(得分:-8)

显然,您插入的对象不应为零。检查一下!