【问题标题】:Further explain NSManagedObject's delete rule Nullify进一步解释 NSManagedObject 的删除规则 Nullify
【发布时间】:2013-01-08 00:23:35
【问题描述】:

这是 Apple 的 Nullify 删除规则文档:

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

使用这个部门>员工示例,该部门的员工由一个NSSet表示。如果我删除一个员工并且删除规则设置为 Nullify,那么 NSSet 会发生什么情况?删除的员工对象是否从集合中移除?对集合中该员工的引用是否为零?整套都作废了吗?

此外,在这种情况下,是否需要在代码中执行其他任何操作以保持引用完整性?

【问题讨论】:

  • 你的错误处理是错误的。你需要测试-save:的返回值,而不是测试error是否非nil
  • 好的,更新了,但它对代码的行为没有影响。您是否发现任何会导致上述行为的原因?
  • 副手,不。您是否尝试在保存后刷新公司?
  • 我发现了这个问题。最后,它与删除规则无关。它最终成为使用多个托管对象上下文和合并问题的问题。我正在删除问题的代码部分,因为此时它与问答并不真正相关。感谢您的帮助!
  • 很高兴听到你想通了!

标签: objective-c ios core-data nsmanagedobject


【解决方案1】:

在您的多对一示例中,该员工已从 NSSet 中删除。 “设置为零”的解释是一对一关系发生的情况。

这与“无操作”规则形成对比,“无操作”规则实际上什么都不做(您可能不应该使用),“拒绝”规则,如果关系尚未取消,则阻止删除,以及“级联”规则,它也会删除目标对象。

【讨论】:

  • 当我在这种情况下使用 Nullify 时,我最终崩溃了。现在我正在使用无操作,在我的 NSManagedObjectContext 中,我首先从公司的 NSSet 中删除员工,然后删除员工并保存我的 NSManagedObjectContext。我是否需要更改执行删除的方式才能使 Nullify 正常工作?
  • @JeremyZ:使用 Nullify,不要费心将员工从公司的 NSSet 中删除。那应该行得通。如果崩溃,你可能会发生一些奇怪的事情。怎么回事?
  • 对不起,没有崩溃...只是保存后数据没有改变。请参阅我在上面的问题中添加的代码。
猜你喜欢
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 2013-05-15
  • 2015-05-17
  • 2015-05-29
相关资源
最近更新 更多