Во время модульных тестов я получаю исключения в потоке Core Data с таким сообщением:
CoreData: ошибка: серьезная ошибка приложения. Исключение было обнаружено во время обработки изменения основных данных. Обычно это ошибка наблюдателя NSManagedObjectContextObjectsDidChangeNotification. - [__ NSCFSet addObject:]: попытка вставить nil с помощью 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
в схему вашего проекта. - person bteapot   schedule 11.01.2016