[__NSArrayM insertObject:atIndex:]:对象不能是零 - 如何确定在何

2019-07-05 16:02发布

我有一个异步事件大项目,有时我有错误[__NSArrayM insertObject:atIndex:]:对象不能是零 ,但是我还没有想法,我怎么能抓住这个错误的抛出这个错误..? 我让断言在随处可见,我使操作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

Answer 1:

检查的一个好方法在您的代码崩溃是:

1)GOTO在Xcode断点标签。

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

3)添加例外断点

a)在休息选项卡中选择两种:

  i) on Throw 

  ii) on Catch 

并建立和r取消。

4)这些断点会给你究竟在何处您的应用程序崩溃90%的时间。

希望这有助于你以某种方式。 :)



Answer 2:

有时候,如果你不能在那里它扔发现异常。 刚刚尝试将这些symbolic breakpoints在您的项目。 然后运行

 objc_exception_throw 
 malloc_error_break
 [NSException raise]

在你的Xcode转到Product -> Debug -> Create Symbolic Breakpoint 。 输入上述每个断点Symbol然后按Done ,也可以通过进入或者创建Breakpoint navigator (cmd + 6)在左下角你可以找到+符号,单击+ ,然后Add symbolic breakpoint 。 现在尝试运行,它会让你的具体行,其中它的崩溃。



Answer 3:

想你需要处理来自阵列的空值。 它对于我来说是这样工作的:

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


Answer 4:

很显然,你插入的对象不应该是零。 核实!



文章来源: [__NSArrayM insertObject:atIndex:]: object cannot be nil - how determine where is the error?