从新的子上下文中删除对象

时间:2016-03-24 22:40:34

标签: ios core-data

从新的子上下文中删除对象时,我有一种奇怪的行为。

我有一个使用主队列的托管对象上下文。 我从中获取对象列表。 我使用私有队列创建新上下文。 我将其父级设置为主要上下文。

当然,我无法尝试直接删除子上下文中列表中的对象。所以我使用existingObjectWithID:来制作一个"等价的列表"来自子上下文的对象。 核心数据告诉我他无法找到这些对象:

  

错误域:NSCocoaErrorDomain代码:133000

     

尝试访问商店中未找到的对象。

     

没有其他错误信息

当然,我无法删除它们。

现在,如果我在子上下文中获取对象列表,则会找到它们并且我可以删除它们(但这样做会让人作弊,我不知道如何获取此列表)。

诀窍是什么?不存在objectObjectWithID:如果对象不在子环境中(还),那么它应该从父上下文中获取吗?

2 个答案:

答案 0 :(得分:0)

假设这些对象已经保存,而不是临时对象,其行为略有不同。

如果您知道对象已存在,则可以使用objectWithID代替existingObjectWithID。请注意,您始终会以这种方式获取对象,但它可能无效,因此您必须进行检查。

虽然所有文档都说父上下文的行为类似于子上下文的永久后备存储,但实际上它并不是这样工作的 - 这就是直接从子上下文中获取对象的原因。

答案 1 :(得分:0)

Tom Harrington在这篇文章(Cannot retrieve temporary object in child context with existingObjectWithID:error:)中的回答完全解释了这个问题。

对我来说,唯一的解决方案是重新考虑上下文堆栈和上下文生命周期。