ошибка: NULL _cd_rawData, но объект не превращается в ошибку (не сбой) - PullRequest
0 голосов
/ 24 ноября 2018

Мое приложение 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:.

(будет редактировать этот пост по мере развития сюжета)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...