【问题标题】:Parent Child Context Confusion & Concurrency issues父子上下文混淆和并发问题
【发布时间】:2016-11-10 13:34:39
【问题描述】:

我对父子上下文设置以及数据的行为方式几乎没有疑问。谁能建议一个链接,我可以在其中找到有关它们如何工作的正确解释。

几点和观察

  1. 父上下文充当子上下文的存储:- 但父上下文中的更改不会反映在子上下文中。

问题 1:如果父上下文充当子上下文的存储,那么为什么父上下文中的更改不会反映在子上下文中,而子上下文会获取它们。

观察:

  1. 在父级中插入:- 子级获取请求获取这些对象。
  2. 更新/删除父对象中的对象:- 然后获取请求不会获取更新的对象,而是为我们提供子上下文中的对象,因此如果我们需要更新的对象,我们必须重置上下文,但随后我们将丢失子上下文中的所有更改或刷新对象。

问题 2: 子级覆盖父级上下文值。因此,如果用户在父上下文中修改了某些内容,并且孩子也修改了相同的内容,那么用户的更新将丢失。在涉及到关系之前,这不是什么大问题。

假设实体A,B(A->>B)之间存在一对多关系。

父上下文:向实体 A 说 Child-1 插入一个新子项。

子上下文:删除实体 A 及其所有子项。

所以现在当子节点保存到父上下文时,它会删除实体 A 和它的旧子节点,新插入的 child-1 仍保留在上下文中,并且引用父节点为空。

我该如何解决这个问题?

【问题讨论】:

    标签: ios core-data concurrency parent-child


    【解决方案1】:

    问题 1 因为您已经提取了数据,所以如果您想按照您所说的那样强制提取,您应该重置上下文或刷新对象。

    问题 2 如果要在删除父实体 A 时始终删除实体 B,可以尝试使用级联删除。

    【讨论】:

    • :- 谢谢,除了级联删除之外,我不能做类似的事情,如果孩子在那里,那么父母必须从主上下文中删除。
    • 您可以改用拒绝规则。 Delete rules
    • 我如何处理由于删除规则拒绝而引起的验证错误,我无法丢弃上下文,因为它也有其他更改。
    • 问题是你的两个上下文走向了两个相反的方向。如果您想优先考虑子更改而不是父更改,我建议您删除子更改并在出现错误时重试操作。但我以前从未这样做过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2015-06-14
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    相关资源
    最近更新 更多