我得到在我的單元測試拋出的異常,對核心數據的線程此消息:調試核心數據__NSCFSet ADDOBJECT無例外
CoreData: error: Serious application error. Exception was caught during Core Data change processing. This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification. -[__NSCFSet addObject:]: attempt to insert nil with userInfo (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]
上設置了符號斷點,但無法在停止時看到任何狀態,幫助我確定哪些對象導致問題。
下一步發生在我身上的是嘗試使用swizzling -[__NSCFSet addObject:]
來添加我自己的實現,所以我只能在參數爲零時才能停止。希望該集合不是空的,並且在插入nil之前通過查看它的內容我可以獲得更多的信息。但是,我遇到了困難,因爲它是一個私人課程。
使用上面的方法,或者我沒有考慮過的方法,如何獲得有關導致異常的更多信息?
看起來像併發問題。爲您的項目方案添加一個「-com.apple.CoreData.ConcurrencyDebug 1」參數。 – bteapot
@bteapot這正是我所需要的。如果你能給出更多擴展的答案,我會接受它。 – Dov