CoreData 关系混乱

Posted

技术标签:

【中文标题】CoreData 关系混乱【英文标题】:CoreData relationship confusion 【发布时间】:2016-08-21 12:08:13 【问题描述】:

假设我有两个实体,名为 Book 和 Publisher 1.书有属性:-作者,书名。 2. Publisher 具有属性:- 名称、类型 我设置了一个关系:- Publisher to Book(一对多并将其设置为反向关系)

选择关系后,我可以在 DataModal 检查器中看到名为 Delete Rule 的行,其中包含三个选项 1. Nullify 2. Cascade 3. Deny

这些是什么,只有在我删除最后一本书时我才想删除 Publisher 实体

提前谢谢你。 我只是一个初学者 :)

【问题讨论】:

【参考方案1】:

文档很好地解释了这些删除规则

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/HowManagedObjectsarerelated.html

关系删除规则

关系的删除规则指定了如果 尝试删除源对象。请注意措辞如果 进行了尝试。如果关系的删除规则设置为拒绝,则 源对象可能不会被删除。再考虑一个 部门的员工关系,以及不同的影响 删除规则。

拒绝如果在关系目的地至少有一个对象 (员工),不要删除源对象(部门)。

例如,如果您想删除一个部门,您必须确保 该部门的所有员工都首先转移到其他地方 (或被解雇!);否则无法删除部门。

Nullify 删除对象之间的关系但不删除 任一对象。

这仅在员工的部门关系时才有意义 是可选的,或者如果您确保为每个 在下一次保存操作之前的员工。

Cascade 删除关系目的地的对象时 你删除源。

例如,如果您删除一个部门,则解雇该部门的所有员工 那个部门。

No Action 对目标位置的对象不执行任何操作 关系。

例如,如果您删除一个部门,则将所有员工保留为 他们是,即使他们仍然相信自己属于那个部门。

应该清楚的是,这些规则中的前三个在 不同的情况。对于任何给定的关系,这取决于你 根据业务逻辑选择最合适的。 没有行动规则可能有用的原因不太明显,因为如果 您使用它,可以将对象图留在 不一致的状态(与已删除的员工有关系的员工 部门)。

如果您使用“无操作”规则,则由您来确保 保持对象图的一致性。你负责 将任何反向关系设置为有意义的值。这可能是 在你有一对多关系的情况下受益 可能是目的地的大量对象。

【讨论】:

以上是关于CoreData 关系混乱的主要内容,如果未能解决你的问题,请参考以下文章

CoreData父、母子关系,一个CoreData子类可以和两个子类有相同的关系吗?

CoreData:通过关系访问对象

CoreData 的 performBlock: 和故障

CoreData:基于关系的 NSPredicate

尽管匹配 x-coredata id,但“CoreData 不支持持久的跨存储关系”

CoreData 多对多关系