我在单元测试期间在核心数据线程上抛出异常,并显示以下消息:
CoreData:错误:严重的应用程序错误。在核心数据更改处理期间捕获到异常。这通常是 NSManagedObjectContextObjectsDidChangeNotification 观察者中的一个错误。-[__NSCFSet addObject:]: 尝试用 userInfo (null) 插入 nil
*** 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:]
我在and上设置了符号断点-[NSManagedObjectContext processPendingChanges]
,但在停在那里时看不到任何状态,这有助于我确定哪些对象导致了问题。
我想到的下一步是尝试 swizzling-[__NSCFSet addObject:]
添加我自己的实现,所以我只能在参数为零时停止。希望集合不是空的,我可以通过在插入 nil 之前查看其内容来获取更多信息。不过,我在调配它时遇到了困难,因为它是一门私人课程。
使用上面的一种方法,或者我没有考虑过的一种方法,我怎样才能获得有关导致异常的原因的更多信息?