进一步解释 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的主要内容,如果未能解决你的问题,请参考以下文章

NSManagedObject 删除无法正常工作

避免获取已删除的 NSManagedObject

删除 NSManagedObject 时出错 [重复]

扩展 NSManagedObject 的删除方法

存储对已删除 NSManagedObject 的引用的局部变量会发生啥

在 commitEditingStyle 中删除 NSManagedObject