当XCode输出类似'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]:etc.
的错误时,如何找到具有该objectAtIndex代码的代码行?
答案 0 :(得分:11)
创建一个新的异常断点。它通常会显示首次抛出异常的位置。转到左侧的Breakpoints选项卡:
答案 1 :(得分:0)
查看下面的行,
你应该对你和系统运行的方法有一个回溯
在那里,你应该找到它所在的方法的名称。
我刚刚接受了一个现有的项目,并添加了类似的崩溃和目的来说明这一点。
我的方法 -
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.contacts = [NSMutableArray arrayWithArray: [ARContact loadContacts]];
NSLog(@"%@", self.contacts[100]); // Index 100 is outside of the array scope
....
}
崩溃的控制台日志(在Xcode的底部)
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 100 beyond bounds for empty array'
*** First throw call stack:
(
0 CoreFoundation 0x0000000101a87495 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x00000001007ec99e objc_exception_throw + 43
2 CoreFoundation 0x0000000101a2d745 -[__NSArrayM objectAtIndex:] + 213
3 PhoneBookApp 0x0000000100001f95 -[ViewController viewWillAppear:] + 261
4 UIKit 0x0000000100b1adb5 -[UIViewController _setViewAppearState:isAnimating:] + 422
5 UIKit 0x0000000100b38c4d -[UINavigationController _startTransition:fromViewController:toViewController:] + 707
在这里,您可以看到事物发生的相反顺序(意味着0是最新的运行,1就在它之前,等等)。
如果您查看数字3和4,您会在崩溃前看到,NSArray
的{{1}}方法(第3行),
这个方法来自objectAtIndex:
(第4行)。