Xcode一致性错误:设置No Action Delete Rule ...是一项高级设置

时间:2011-04-12 01:38:03

标签: iphone objective-c xcode core-data data-modeling

在Xcode中创建数据模型后,它会为每个对象关系抛出以下错误:

Consistency Error:
Setting the No Action Delete Rule on [object relationship] is an advanced setting

Xcode试图告诉我什么,我应该如何回应?

2 个答案:

答案 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现在是“悬空的核心数据对象参考”。

这不是一个悬垂的指针;标准内存管理规则意味着ba指向它时会存在a(直到a.foo变成错误),但a将永远引用已删除object,当您尝试访问其属性时引发异常。我不确定当您保存并重新获取a时会发生什么。

与多对多的关系,它变得更加复杂。实现细节:该关系似乎由一个实体“拥有”,并且仅在保存该实体时保存(我尝试在不同的MOC之间建立关系时遇到此错误:保存的MOC没有更新的实体,因此从未保存过该关系)。显然,当您删除 b和{{1}}时,关系也应该被删除,因此假设关系消失,其中只有一个被删除(但是你没有知道哪一个!)。


你可能想要Nullify或Cascade。我从不使用Cascade,因为我永远无法记住级联发生的方向。

答案 1 :(得分:13)

<强>拒绝 如果关系目标中至少有一个对象,则无法删除源对象。 例如,如果要删除部门,则必须确保该部门中的所有员工首先转移到其他地方(或被解雇!),否则无法删除部门。

<强>抵消 将目标上的对象的反向关系设置为null。 例如,如果删除部门,请将所有当前成员的部门设置为null。只有当员工的部门关系是可选的,或者如果您确保在下一次保存操作之前为每个员工设置新部门时,这才有意义。

<强>级联 删除关系目标处的对象。 例如,如果删除部门,则同时解雇该部门中的所有员工。

无动作 对关系目的地的对象不执行任何操作。 例如,如果您删除某个部门,请将所有员工保持原样,即使他们仍然认为他们属于该部门。