从新的子上下文中删除对象时,我有一种奇怪的行为。
我有一个使用主队列的托管对象上下文。 我从中获取对象列表。 我使用私有队列创建新上下文。 我将其父级设置为主要上下文。
当然,我无法尝试直接删除子上下文中列表中的对象。所以我使用existingObjectWithID:来制作一个"等价的列表"来自子上下文的对象。 核心数据告诉我他无法找到这些对象:
错误域:NSCocoaErrorDomain代码:133000
尝试访问商店中未找到的对象。
没有其他错误信息
当然,我无法删除它们。
现在,如果我在子上下文中获取对象列表,则会找到它们并且我可以删除它们(但这样做会让人作弊,我不知道如何获取此列表)。
诀窍是什么?不存在objectObjectWithID:如果对象不在子环境中(还),那么它应该从父上下文中获取吗?
答案 0 :(得分:0)
假设这些对象已经保存,而不是临时对象,其行为略有不同。
如果您知道对象已存在,则可以使用objectWithID
代替existingObjectWithID
。请注意,您始终会以这种方式获取对象,但它可能无效,因此您必须进行检查。
虽然所有文档都说父上下文的行为类似于子上下文的永久后备存储,但实际上它并不是这样工作的 - 这就是直接从子上下文中获取对象的原因。
答案 1 :(得分:0)
Tom Harrington在这篇文章(Cannot retrieve temporary object in child context with existingObjectWithID:error:)中的回答完全解释了这个问题。
对我来说,唯一的解决方案是重新考虑上下文堆栈和上下文生命周期。