进一步解释 NSManagedObject 的删除规则 Nullify
Posted
技术标签:
【中文标题】进一步解释 NSManagedObject 的删除规则 Nullify【英文标题】:Further explain NSManagedObject's delete rule Nullify 【发布时间】:2013-01-08 00:23:35 【问题描述】:这是 Apple 的 Nullify 删除规则文档:
Nullify 将目标对象的反向关系设置为 null。例如,如果您删除一个部门,请设置 部门为所有当前成员为空。这才有意义 如果员工的部门关系是可选的,或者如果您 确保您之前为每个员工设置了一个新部门 下一个保存操作。
使用这个部门>员工示例,该部门的员工由一个NSSet表示。如果我删除一个员工并且删除规则设置为 Nullify,那么 NSSet 会发生什么情况?删除的员工对象是否从集合中移除?对集合中该员工的引用是否为零?整套都作废了吗?
此外,在这种情况下,是否需要在代码中执行其他任何操作以保持引用完整性?
【问题讨论】:
你的错误处理是错误的。你需要测试-save:
的返回值,而不是测试error
是否非nil
。
好的,更新了,但它对代码的行为没有影响。您是否发现任何会导致上述行为的原因?
副手,不。您是否尝试在保存后刷新公司?
我发现了这个问题。最后,它与删除规则无关。它最终成为使用多个托管对象上下文和合并问题的问题。我正在删除问题的代码部分,因为此时它与问答并不真正相关。感谢您的帮助!
很高兴听到你想通了!
【参考方案1】:
在您的多对一示例中,该员工已从 NSSet
中删除。 “设置为零”的解释是一对一关系发生的情况。
这与“无操作”规则形成对比,“无操作”规则实际上什么都不做(您可能不应该使用),“拒绝”规则,如果关系尚未取消,则阻止删除,以及“级联”规则,它也会删除目标对象。
【讨论】:
当我在这种情况下使用 Nullify 时,我最终崩溃了。现在我正在使用无操作,在我的 NSManagedObjectContext 中,我首先从公司的 NSSet 中删除员工,然后删除员工并保存我的 NSManagedObjectContext。我是否需要更改执行删除的方式才能使 Nullify 正常工作? @JeremyZ:使用 Nullify,不要费心将员工从公司的NSSet
中删除。那应该行得通。如果崩溃,你可能会发生一些奇怪的事情。怎么回事?
对不起,没有崩溃...只是保存后数据没有改变。请参阅我在上面的问题中添加的代码。以上是关于进一步解释 NSManagedObject 的删除规则 Nullify的主要内容,如果未能解决你的问题,请参考以下文章