:对象不能为零 – 如何确定错误在哪里?

我有异步事件的大项目,有时我有错误[__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 

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

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

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

3)添加exception断点

a)在break选项卡中选择两个:

  i) on Throw ii) on Catch 

并建立和联合国。

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

希望这对你有所帮助。 🙂

有时如果你找不到它抛出的exception。 只需尝试在项目中添加这些symbolic breakpoints 。 然后跑

  objc_exception_throw 
  malloc_error_break
  [NSException raise]

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

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

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

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