Мое приложение CoreData довольно часто регистрирует эту ошибку в моей консоли отладки:
2018-11-24 19:47:12.516168+0100 SGI Phone[71132:13177420] [error] fault: NULL _cd_rawData but the object is not being turned into a fault
CoreData: fault: NULL _cd_rawData but the object is not being turned into a fault
Однако, это , а не сбой.Приложение продолжается счастливо.И, видимо, никакого вреда не было.
Тем не менее, я волнуюсь.Все ссылки на это сообщение о сбоях.
Кроме того, я проверяю все вызовы, которые возвращают NSError
, и ни один из них не срабатывает.
Кроме того, все ссылки, которые яfound говорит, что это происходит, когда NSManagedContext
используется вне его потока.Однако я включил флаг отладки -com.apple.CoreData.ConcurrencyDebug 1
, и он никогда не срабатывает.
Мое приложение очень большое, и я не знаю, какой фрагмент кода мог бы опубликовать здесь, чтобы помочь сузить проблему.
FWIW, я использую современный стек основных данных с NSPersistentContainer
, двумя NSManagedContext
: основным viewContext
и одним фоновым контекстом, выделенным при запуске.
Я использую по умолчанию "error "объединить политику, которая никогда не вызывает ошибку, когда я объединяю два изменения контекста при получении уведомления.
Есть идеи, как установить точку останова, когда Core Data выводит это сообщение об ошибке?Любая другая идея?Какой фрагмент кода я должен опубликовать, так как я не могу определить (пока) воспроизводимый случай, когда это происходит?
Редактировать 1: это происходит только тогда, когда я вставляю этот код в одно из моих NSManagedObject
CoreКласс данных:
static void * KVOprogressStateContext = &KVOprogressStateContext;
- (void)awakeFromFetch
{
[super awakeFromFetch];
[self addObserver:self forKeyPath:@"report.progressState" options:(NSKeyValueObservingOptions)(NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew) context:KVOprogressStateContext];
}
- (void)awakeFromInsert
{
[super awakeFromInsert];
[self addObserver:self forKeyPath:@"report.progressState" options:(NSKeyValueObservingOptions)(NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew) context:KVOprogressStateContext];
}
- (void)didTurnIntoFault
{
[self removeObserver:self forKeyPath:@"report.progressState"];
[super didTurnIntoFault];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
}
И сообщение об ошибке появляется всегда перед вызовом метода observeValueForKeyPath:
.
(будет редактировать этот пост по мере развития сюжета)