在Xcode中创建数据模型后,它会为每个对象关系抛出以下错误:
Consistency Error:
Setting the No Action Delete Rule on [object relationship] is an advanced setting
Xcode试图告诉我什么,我应该如何回应?
答案 0 :(得分:43)
核心数据使用反向关系并删除规则以保持对象图一致
假设你有A.foo< 1-1> B.bar并做a.foo = b
。此会自动(有效地)执行b.bar = a
。
现在让我们说你[b delete]
。使用“无效”规则,有效地b.bar.foo = nil
。使用“级联”,它会[b.bar delete]
。 “没有行动”,它什么都不做; a.foo
现在是“悬空的核心数据对象参考”。
这不是一个悬垂的指针;标准内存管理规则意味着b
在a
指向它时会存在a
(直到a.foo
变成错误),但a
将永远引用已删除object,当您尝试访问其属性时引发异常。我不确定当您保存并重新获取a
时会发生什么。
与多对多的关系,它变得更加复杂。实现细节:该关系似乎由一个实体“拥有”,并且仅在保存该实体时保存(我尝试在不同的MOC之间建立关系时遇到此错误:保存的MOC没有更新的实体,因此从未保存过该关系)。显然,当您删除 b
和{{1}}时,关系也应该被删除,因此假设关系消失,其中只有一个被删除(但是你没有知道哪一个!)。
你可能想要Nullify或Cascade。我从不使用Cascade,因为我永远无法记住级联发生的方向。
答案 1 :(得分:13)
<强>拒绝强> 如果关系目标中至少有一个对象,则无法删除源对象。 例如,如果要删除部门,则必须确保该部门中的所有员工首先转移到其他地方(或被解雇!),否则无法删除部门。
<强>抵消强> 将目标上的对象的反向关系设置为null。 例如,如果删除部门,请将所有当前成员的部门设置为null。只有当员工的部门关系是可选的,或者如果您确保在下一次保存操作之前为每个员工设置新部门时,这才有意义。
<强>级联强> 删除关系目标处的对象。 例如,如果删除部门,则同时解雇该部门中的所有员工。
无动作 对关系目的地的对象不执行任何操作。 例如,如果您删除某个部门,请将所有员工保持原样,即使他们仍然认为他们属于该部门。