我正在使用Swift编写iOS应用程序。
应用程序崩溃了一段时间,我在控制台中得到的是:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: updated_objectIDs)'
*** First throw call stack:
(0x1858151b8 0x18424c55c 0x1856f5a0c 0x1856ffa40 0x187bc3540 0x187b4edf8 0x187b399bc 0x187b329dc 0x1857c20c0 0x1857bfcf0 0x1857c0180 0x1856ee2b8 0x1871a2198 0x18b7357fc 0x18b730534 0x100069440 0x1846d15b8)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
我试图找出它的来源。
我现在不知道我的代码的哪些部分可能导致此崩溃。
找到更多信息的正确方法是什么,并且可能在代码中找到导致此崩溃的部分?
答案 0 :(得分:2)
您可以创建一个新的异常断点。这将帮助您找出Xcode中发生异常的行号。
请查看以下链接了解详情。
Xcode doesn't show the line that causes a crash
Objective C - getting line number or full stack trace from debugger error?
所以,我尝试了建议的方法。没有运气了。
也许添加剩下的日志可以帮助人们获取更多信息,也许可以帮助我弄清楚发生了什么。这是我在应用程序崩溃时在控制台中看到的内容:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: updated_objectIDs)'
*** First throw call stack:
(
0 CoreFoundation 0x000000010de39d4b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x000000010d2f521e objc_exception_throw + 48
2 CoreFoundation 0x000000010dd4fd87 -[__NSDictionaryM setObject:forKey:] + 1047
3 CoreFoundation 0x000000010ddb8729 -[NSMutableDictionary addEntriesFromDictionary:] + 329
4 CoreData 0x000000010da00b14 -[NSManagedObjectContext(_NSInternalChangeProcessing) _createAndPostChangeNotification:deletions:updates:refreshes:deferrals:wasMerge:] + 1844
5 CoreData 0x000000010d9646f7 -[NSManagedObjectContext(_NSInternalChangeProcessing) _postRefreshedObjectsNotificationAndClearList] + 215
6 CoreData 0x000000010d962dbf -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:] + 111
7 CoreData 0x000000010d93c143 _performRunLoopAction + 339
8 CoreFoundation 0x000000010ddde267 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
9 CoreFoundation 0x000000010ddde1d7 __CFRunLoopDoObservers + 391
10 CoreFoundation 0x000000010ddc2f8e __CFRunLoopRun + 1198
11 CoreFoundation 0x000000010ddc2884 CFRunLoopRunSpecific + 420
12 GraphicsServices 0x000000011234fa6f GSEventRunModal + 161
13 UIKit 0x000000010f060c68 UIApplicationMain + 159
14 App 0x000000010adae2ff main + 111
15 libdyld.dylib 0x00000001113a768d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
答案 1 :(得分:1)
在我看到的例外情况中:setObjectForKey
和updated_objectIDs
的密钥。
我会采取一些措施来追踪这一点。我可能尝试的第一件事就是搜索updated_objectIDs
并查看它可能会传递到setObjectForKey
的位置。
然后记录当时传入的对象的地址(或description
),你可能会发现它正在发生。
更好(以及我在自己的工作中所做的)是在所有异常上设置断点。您可以在这个密切相关的问题中按照the steps in this answer进行操作。
然后,当异常触发时,Xcode会在该行代码停止。