当前位置:  开发笔记 > IOS > 正文

调试核心数据__NSCFSet addObject nil异常

如何解决《调试核心数据__NSCFSetaddObjectnil异常》经验,为你挑选了1个好方法。

我在单元测试期间在Core Data线程上抛出异常,并显示以下消息:

CoreData:错误:严重的应用程序错误.在Core Data更改处理期间捕获到异常.这通常是NSManagedObjectContextObjectsDidChangeNotification的观察者中的错误. - [__ NSCFSet addObject:]:尝试使用userInfo插入nil(null)

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFSet addObject:]: attempt to insert nil'
*** First throw call stack:
(
    0   CoreFoundation                      0x00683a14 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x02334e02 objc_exception_throw + 50
    2   CoreFoundation                      0x0068393d +[NSException raise:format:] + 141
    3   CoreFoundation                      0x005595b9 -[__NSCFSet addObject:] + 185
    4   CoreData                            0x001d47c0 -[NSManagedObjectContext(_NSInternalChangeProcessing) _processPendingInsertions:withDeletions:withUpdates:] + 560
    5   CoreData                            0x001cee8a -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:] + 2410
    6   CoreData                            0x001ce506 -[NSManagedObjectContext processPendingChanges] + 54
    7   CoreData                            0x001f359b developerSubmittedBlockToNSManagedObjectContextPerform + 443

我正在尝试确定导致它的原因,但由于它发生在NSManagedObjectContext队列中,因此该线程没有任何堆栈跟踪与我自己的代码.

我在设置断点的象征-[__NSCFSet addObject:]-[NSManagedObjectContext processPendingChanges],但无法看到任何状态,而停在那里,帮助我确定哪些对象造成的问题.

我想到的下一步是尝试调配-[__NSCFSet addObject:]以添加我自己的实现,所以我只能在参数为零时停止.希望该集合不是空的,我可以通过在插入nil之前查看其内容来获取更多信息.然而,我遇到了困难,因为它是一个私人课程.

使用上面的方法,或者我没有考虑过的方法,如何获得有关导致异常的更多信息?



1> Dov..:

感谢@bteapot建议我将-com.apple.CoreData.ConcurrencyDebug 1参数添加到我的方案中.我从Ole Begemann出色的Core Data Concurrency Debugging文章中获得了有关其工作原理的更多信息.

添加此标志会导致在代码NSManagedObjectContext从错误的线程调用您的错误时抛出异常.这在Xcode中很有用,但是请注意,在Xcode Bot中,这会导致测试失败并显示以下无用的消息:

与测试管理器服务的连接丢失

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有