6

我有一个带有异步事件的大项目,有时我有错误 [__NSArrayM insertObject:atIndex:]: object cannot be 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

4 回答 4

47

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

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

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

3)添加异常断点

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

  i) on Throw 

  ii) on Catch 

并构建和运行。

4) 这些断点会告诉你应用程序在 90% 的情况下崩溃的确切位置。

希望这对您有所帮助。:)

于 2012-12-18T09:11:19.520 回答
3

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

objc_exception_throw
 malloc_error_break
 [NSException 引发]

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

于 2012-12-18T09:50:31.107 回答
0

认为您需要处理 Array 中的空值。它对我有用,例如:

if ( array ! = nil ) {
    NSLog(@"name is nil");
} else {
    // addobject to array 
}
于 2017-09-27T08:59:07.897 回答
-8

显然,您插入的对象不应为零。核实!

于 2012-12-18T09:09:01.350 回答