修复NSInvalidArgumentException:*** setObjectForKey:object不能为nil(key:updated_objectIDs)

时间:2017-03-15 04:00:18

标签: ios swift

我正在使用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) 

我试图找出它的来源。

我现在不知道我的代码的哪些部分可能导致此崩溃。

找到更多信息的正确方法是什么,并且可能在代码中找到导致此崩溃的部分?

2 个答案:

答案 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)

在我看到的例外情况中:setObjectForKeyupdated_objectIDs的密钥。

我会采取一些措施来追踪这一点。我可能尝试的第一件事就是搜索updated_objectIDs并查看它可能会传递到setObjectForKey的位置。

然后记录当时传入的对象的地址(或description),你可能会发现它正在发生。

更好(以及我在自己的工作中所做的)是在所有异常上设置断点。您可以在这个密切相关的问题中按照the steps in this answer进行操作。

然后,当异常触发时,Xcode会在该行代码停止