Objective c [\uu NSArrayM insertObject:atIndex:]:对象不能为零-如何确定错误在哪里?

Objective c [\uu NSArrayM insertObject:atIndex:]:对象不能为零-如何确定错误在哪里?,objective-c,ios,nsarray,null,nserror,Objective C,Ios,Nsarray,Null,Nserror,我有一个带有异步事件的大项目,有时我会出错 [\uu NSArrayM insertObject:atIndex:]:对象不能为零, 但是我不知道这个错误在哪里。。我怎样才能抓住这个错误?我在操作insertobject的任何地方都进行断言:atIndex和nothing 这是堆栈: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM in

我有一个带有异步事件的大项目,有时我会出错 [\uu NSArrayM insertObject:atIndex:]:对象不能为零, 但是我不知道这个错误在哪里。。我怎样才能抓住这个错误?我在操作insertobject的任何地方都进行断言:atIndex和nothing

这是堆栈:

*** 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) 添加异常断点

a) 在“打断”选项卡中,选择两个选项:

  i) on Throw 

  ii) on Catch 
和建立和r 联合国

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


希望这对您有所帮助。:

有时,如果您找不到异常抛出的位置,请尝试在项目中添加这些
符号断点,然后运行

objc_exception_throw malloc_error_break [NSException raise] objc_异常_抛出 malloc\u错误\u中断 [N异常上升]
Xcode
goto
Product->Debug->Create Symbol Breakpoint
中输入上述
Symbol
中的每个断点,然后按
Done
或转到
断点导航器(cmd+6)进行创建
在左下角,您可以找到
+
符号,单击该
+
然后
添加符号断点
。现在尝试运行,它会将您带到崩溃的特定行。

您认为需要处理数组中的空值。 它对我有用 比如:

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

获取异常发生时的回溯,这将很有帮助。OP想知道一种技术来定位异常发生的位置,而不是为什么这不是一个有效的答案来帮助解决这个问题忘记这些并偶然发现这个答案,谢谢帮助了很多这应该是标准的xcode行为。谢谢Apple。谢谢。Divya。这对t在常规异常断点无法执行的情况下,对异常进行遍历。