核心数据:refreshObject:mergeChanges:出现“缺失的链接”

Posted

技术标签:

【中文标题】核心数据:refreshObject:mergeChanges:出现“缺失的链接”【英文标题】:Core Data: refreshObject:mergeChanges: faulting with a "missing link" 【发布时间】:2012-07-02 08:42:45 【问题描述】:

假设我有以下实体关系模型:

A <-->> B <-->> C <-->> D

A 是我的根对象,我将它保留在我的应用程序的某个位置。我使用 NSFetchRequest 来获取 C 的特定实例及其所有底层 D 对象,因此 B 尚未在上下文中注册。在我用完 C 之后,我想通过保存和使用 refreshObject:mergeChanges: 来清除该内存,将它连同它的所有 D 对象一起变成故障。但是,我想保持我的 A 对象完好无损。

由于所有相关实体都会变回故障,Core Data 是否会按照图表返回到我的 A 对象,或者上下文中缺少注册的 B 对象来链接两者会阻止这种情况发生吗?

【问题讨论】:

【参考方案1】:

我会假设后者(对 A 没有更改),但您可以通过在托管对象子类中覆盖 willTurnIntoFault 来轻松检查:

- (void) willTurnIntoFault

    NSLog(@"%@ will turn into fault", self.name);
    [super willTurnIntoFault];

【讨论】:

以上是关于核心数据:refreshObject:mergeChanges:出现“缺失的链接”的主要内容,如果未能解决你的问题,请参考以下文章

使用 MKMapView、核心位置和核心数据

大数据三大核心技术:拿数据、算数据、卖数据!

核心数据道模式

通过迁移将核心数据实体及其数据移动到新的核心数据模型文件中

核心数据与用于核心数据的单个 MOC 和主线程合并冲突

核心数据——数据故障