CoreData多对多关系的插入和删除操作

时间:2014-09-08 08:29:38

标签: ios objective-c core-data many-to-many

我对CoreData关系有疑问。

我遇到这种情况:

我有DOG和BONE实体。

  • 每个狗都可以拥有更多BONE。
  • 每个BONE可以有更多的狗。

所以我需要多对多的关系。

如何在CoreData中设置报告删除?什么样的?

我想我需要这样的东西:

  • 当我删除BONE时,我不必删除DOG;
  • 当我删除DOG时,如果从DOG使用它,我不必删除BONE。
  • 当我删除DOG时,如果仅使用此DOG,我必须删除BONE。

如果我强加这种关系类型,这个机制会自动用于CoreData吗?

关于插入?

例如:我需要插入带有一些Bones的DOG:如何检查骨骼是否已经存在? 我表中的每个骨骼都有一个ID

1 个答案:

答案 0 :(得分:0)

首先,很难掌握你的例子,因为它没有直观意义。话虽如此,忽略实体类型,如果你有一个实体A和B具有相互多对的关系(多对多)。

Apple: Relationships and Fetched Properties

(为了简洁起见,假设'entity'='entity instance'在下面)

要插入:

  • 您必须同时插入实体A和插入实体B.核心数据不会 如果您创建实体A,则自动创建实体B,只因为它们具有关系
  • 如果您希望将现有实体B与新实体A相关联,那么 你必须插入实体A然后通过实体B链接实体A. 关系。仅仅因为您在对象模型中定义了关系,并不意味着对象在插入时会自动相关。你需要明确地这样做

要删除:

  • Coredata将允许您设置'关系删除规则'。这将控制在关系的一端删除对象时发生的情况。您必须在每一端设置规则,因为您可以选择删除实体A或实体B.删除规则包括:拒绝,无效,级联,无操作。查看Apple的文档就可以解答上面的问题(很明显)。
  • 将您的示例应用于删除规则:

当我删除BONE时,我不必删除DOG; (不采取行动)
当我删除DOG时,如果从DOG使用它,我不必删除BONE。 (否认或无效)
当我删除DOG时,我必须删除BONE,如果这些仅用于此DOG。 (级联)