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

Dan*_*Dan 18 iphone xcode core-data data-modeling objective-c

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

Consistency Error:
Setting the No Action Delete Rule on [object relationship] is an advanced setting
Run Code Online (Sandbox Code Playgroud)

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

tc.*_*tc. 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.

随着多对多的关系,它变得更加复杂.实现细节:该关系似乎由其中一个实体"拥有" ,并且仅在保存该实体时保存(我尝试在不同的MOC之间建立关系时遇到此错误:保存的MOC不属于更新的实体,因此从未保存过该关系).很显然,当你删除这两个 ab的关系也应该去掉,这样一个假设,只有其中一个被删除的关系消失(但你不知道哪一个!).


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


Dan*_*iel 13

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

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

级联 删除关系目标处的对象.例如,如果删除部门,则同时触发该部门中的所有员工.

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