例如,我在调试区域中收到此错误:
2014-05-01 05:01:28.052 MyApp[93187:303] *** setObjectForKey: object cannot be nil (key: -1)
2014-05-01 05:01:28.057 MyApp[93187:303] (
0 CoreFoundation 0x00007fff8cb3f25c __exceptionPreprocess + 172
1 libobjc.A.dylib 0x00007fff89202e75 objc_exception_throw + 43
2 CoreFoundation 0x00007fff8ca3a46e -[__NSDictionaryM setObject:forKey:] + 1102
3 MyApp 0x0000000100009725 +[SystemTools getData:] + 5509
4 MyApp 0x0000000100001c4b -[AppDelegate drawCanvas:] + 1467
5 MyApp 0x0000000100001675 -[AppDelegate repeatingTimer:] + 85
6 Foundation 0x00007fff8ec480f4 __NSFireTimer + 96
7 CoreFoundation 0x00007fff8caa6564 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
8 CoreFoundation 0x00007fff8caa609f __CFRunLoopDoTimer + 1151
9 CoreFoundation 0x00007fff8cb175aa __CFRunLoopDoTimers + 298
10 CoreFoundation 0x00007fff8ca618e5 __CFRunLoopRun + 1525
11 CoreFoundation 0x00007fff8ca610b5 CFRunLoopRunSpecific + 309
12 HIToolbox 0x00007fff875dca0d RunCurrentEventLoopInMode + 226
13 HIToolbox 0x00007fff875dc7b7 ReceiveNextEventCommon + 479
14 HIToolbox 0x00007fff875dc5bc _BlockUntilNextEventMatchingListInModeWithFilter + 65
15 AppKit 0x00007fff907853de _DPSNextEvent + 1434
16 AppKit 0x00007fff90784a2b -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 122
17 AppKit 0x00007fff90778b2c -[NSApplication run] + 553
18 AppKit 0x00007fff90763913 NSApplicationMain + 940
19 MyApp 0x0000000100016aa2 main + 34
20 libdyld.dylib 0x00007fff9440b5fd start + 1
21 ??? 0x0000000000000003 0x0 + 3
)
不幸的是,我有几个" setObject:forKey:"调用" SystemTools getData:"功能。
如何确定此错误与哪个调用相关?这个数字(加号后)意味着什么?
答案 0 :(得分:2)
在断点中添加Execption breakpoint。这将停止导致应用程序崩溃的代码行。这样你就不必使用NSLogs
进行调试。
Xcode的默认行为是停止异常的位置 抓住了,而不是引发异常的地方!
要解释崩溃日志中的这些行: 来自Ray Wenderlich's blog:
2 XYZLib 0x34648e88 0x83000 + 8740
基本上是四列:
答案 1 :(得分:1)
在所有setObject:forKey调用中使用断点。使用NSLog在日志中打印一些有用的信息。您是开发人员,因此您还需要了解调试。
答案 2 :(得分:0)
输出的第一行在这里很有用:
setObjectForKey: object cannot be nil (key: -1)
NSDictionary不喜欢nil值,所以在你的getData方法中寻找一个可以为键值“-1”赋值的地方。
祝你好运!