【问题标题】: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”之外的子类别实体中的某些属性,这可能是原因吗?这种情况一个月发生两次,所以很难调试,上次发生这种情况我保存了一个数据库文件但仍然无法弄清楚。

标签: ios core-data


【解决方案1】:

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

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

请参阅 Apple 文档 here

【讨论】:

  • 我不在代码中的任何地方使用 refreshObject:mergeChanges:。
  • 你使用原始访问器吗?还是直接修改Category.Subcategories NSSet?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
相关资源
最近更新 更多