核心数据,关系消失

Posted

技术标签:

【中文标题】核心数据,关系消失【英文标题】:Core-data, relationship disappearing 【发布时间】:2014-12-05 13:38:45 【问题描述】:

我在数据库中有两个实体,类别和子类别。类别可以有多个子类别。关系定义如下:

Category->Subcategories(to-many, has inverse, cascade)

Subcategory->Category(to-one, has inverse, nullify)

一切正常,但有时 Category->Subcategories 关系为空,而 Subcategory->Category 正常,这很奇怪。这种情况很少发生,我无法找出原因。

以下是来自控制台的日志,其中可以看到类别实例具有空的子类别关系,但数据库中的子类别之一与其关系具有相同的类别实例。

我不明白关系的一端是空的还是好的,因为当设置任一端时它们会自动连接。


Category: 0x7b6f8020> (entity: Category; id: 0x7b6f6d40 x-coredata://021C3D9A-7A0C-4326-B526-9E9253611C44/Category/p8> ; data: 
    … other data
    subcategories =     (
    );
)

Subcategory: 0x7c8f7770> (entity: Subcategory; id: 0x7c8c91b0 x-coredata://021C3D9A-7A0C-4326-B526-9E9253611C44/Subcategory/p5> ; data: 
    … other data
    category = "0x7b6f6d40 x-coredata://021C3D9A-7A0C-4326-B526-9E9253611C44/Category/p8>";
)

【问题讨论】:

很奇怪。也许在 XCode 中添加数据模型的屏幕截图,以便我们帮助查找设置不正确的内容? 这两个对象是否来自同一个托管对象上下文? 是的,这两个对象来自同一个 MOC。数据模型没问题,否则根本行不通。我发现一段代码改变了“performblock”之外的子类别实体中的某些属性,这可能是原因吗?这种情况一个月发生两次,所以很难调试,上次发生这种情况我保存了一个数据库文件但仍然无法弄清楚。 【参考方案1】:

你使用refreshObject:mergeChanges:吗?该文档似乎表明这可能会导致诸如您的问题:

您可以使用 refreshObject:mergeChanges: 方法将已实现的对象变为故障。如果您将 NO 作为 mergeChanges 参数传递,则必须确保该对象的关系没有更改。如果有,然后保存上下文,就会给持久存储引入参照完整性问题。

请参阅 Apple 文档 here。

【讨论】:

我不在代码中的任何地方使用 refreshObject:mergeChanges:。 你使用原始访问器吗?还是直接修改Category.Subcategories NSSet?

以上是关于核心数据,关系消失的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSFetchedResultsController 和核心数据移动时 UITableView 单元格消失

加载主 TableViewController 后,值从核心数据中消失

将图像数据保存到核心数据但再次启动模拟器,它消失了

Ember:关系链接相关数据未加载/消失

核心数据:没有重复使用表格单元格的索引路径,单元格消失

多对多关系核心数据