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子类可以和两个子类有相同的关系吗?