Иногда при использовании объекта Core-Data приложение вылетает с ошибкой:
CoreData: ошибка: NULL _cd_rawData, но объект не поворачивается в неисправность
Из того, что я мог исследовать и читать из Интернета, заключается в том, что это происходит, когда контекст управляемого объекта передается между двумя потоками, а MOC не являются потокобезопасными.
Этот сбой появляется всякий раз, когда я хочу получить доступ к свойству из объекта CD.
Если у меня есть объект Person и вы хотите получить доступ к Perosn.name, приложение может потерпеть крах с этой ошибкой (как было сказано ранее, это происходит, насколько я могу видеть случайным образом, и я не могу воспроизвести его, иногда это произойдет 10 раз в строка, а затем не произойдет в течение дня или двух).
При рассмотрении этой проблемы кажется, что это происходит, когда Person получает и обновляет отношения с друзьями (это делается в фоновом потоке, сохраняется и объединяется с основным потоком MOC).
Я хотел бы получить больше информации о том, что здесь происходит, почему эта ошибка происходит, поскольку она кажется довольно случайной и если есть какой-либо способ предотвратить сбой.
Ниже приведен код, в котором сохраняется контекст:
__block MyAppDelegate *blockSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
[blockSelf.managedObjectContext performBlock:^{
[blockSelf.managedObjectContext save:nil];
dispatch_async(blockSelf.core_data_queue, ^{
[blockSelf.writerContext performBlock:^{
[blockSelf.writerContext save:nil];
}];
});
}];
});
Обновление 1 Иногда при выполнении saveContext я получаю следующую ошибку:
"Ошибка домена = NSCocoaErrorDomain Code = 1550" Операция не может быть выполнена. (Cocoa ошибка 1550.)
Висячая ссылка на недопустимый объект. = null
NSLocalizedDescription = Операция не может быть выполнена. (Cocoa ошибка 1550.), NSValidationErrorValue = Отслеживание "друзей" на управляемом объекте (0x201cd340)
UID: < 4C1B48C8-6309-4E8E-A590-DED497907A3A > . Идентификатор объекта: (null). с объектами {(\n '(null) "UID: < (null) > .)}}"
Я нашел этот ответ из другого вопроса: "Это было связано с тем, что объект был создан, созданный в другом контексте, обратите внимание не на другой поток только на другой контекст в том же потоке".
Кажется ли это так, и если это так, я могу найти, где объект создается в другом контексте, к которому я пытаюсь сохранить...