错误:NULL _cd_rawData,但是该对象没有变成错误(不是崩溃)

时间:2018-11-24 19:08:31

标签: core-data

我的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的呼叫,但没有一个失败。

此外,我发现的所有引用都说NSManagedContext在其线程外使用时会发生。但是,我已经启用了-com.apple.CoreData.ConcurrencyDebug 1调试标志,并且从未触发过它。

我的应用程序很大,我不知所措,我可以在此处发布什么代码段来帮助缩小问题的范围。

FWIW,我使用了一个现代的Core Data堆栈,其中包含NSPersistentContainer,两个NSManagedContext:主要的viewContext和在启动时分配的单个背景上下文。

我使用默认的“错误”合并策略,当我在收到通知时合并两个上下文更改时,它永远不会触发错误。

有人知道如何在Core Data输出此错误消息时设置断点吗? 还有其他想法吗? 我应该发布什么代码,因为在发生这种情况时我还无法识别(可)重现的情况?

编辑1:仅当我将此代码插入我的NSManagedObject核心数据类之一时,这种情况才会发生:

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:方法之前出现。

(随着故事的发展,将对此帖子进行编辑)

0 个答案:

没有答案