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
现在是一个"悬空的核心数据对象参考".
这不是一个悬垂的指针; 标准内存管理规则意味着b
在a
指向它时仍会存在于内存中(直到a
变成错误),但a.foo
会永远引用一个已删除的对象,当您尝试访问其属性时会引发异常.我不确定当你保存和重新获取时会发生什么a
.
随着多对多的关系,它变得更加复杂.实现细节:该关系似乎由其中一个实体"拥有" ,并且仅在保存该实体时保存(我尝试在不同的MOC之间建立关系时遇到此错误:保存的MOC不属于更新的实体,因此从未保存过该关系).很显然,当你删除这两个 a
和b
的关系也应该去掉,这样一个假设,只有其中一个被删除的关系消失(但你不知道哪一个!).
你可能想要Nullify或Cascade.我从不使用Cascade,因为我永远无法记住级联发生的方向.
Dan*_*iel 13
拒绝 如果关系目标中至少有一个对象,则无法删除源对象.例如,如果要删除部门,则必须确保该部门中的所有员工首先转移到其他地方(或解雇!),否则无法删除部门.
Nullify 将目标对象的反向关系设置为null.例如,如果删除部门,请将所有当前成员的部门设置为null.只有当员工的部门关系是可选的,或者您确保在下一次保存操作之前为每个员工设置新部门时,这才有意义.
级联 删除关系目标处的对象.例如,如果删除部门,则同时触发该部门中的所有员工.
无操作 对关系目的地的对象不执行任何操作.例如,如果您删除某个部门,请将所有员工保持原样,即使他们仍然认为他们属于该部门.