我了解这两个电话之间记录的差异。但是,有谁知道我注意到以下观察到的行为的原因:
如果我有一个 parentContext 和一个临时 childContext,我使用 childContext 编辑、插入和删除对象,如果使用 [childContext objectWithID:objectID]; 要检索存在于父上下文中的已知现有托管对象,它有时会给我一个带有错误的对象,该对象在被触发时失败并生成异常。我理解 objectWithID: 将始终返回处于故障状态的对象,而不管给定的 objectID 是否存在实际的 managedObject。但是,如果该对象实际上存在于父上下文中,我希望当访问任何属性时,该对象将始终成功地从父上下文中检索(例如,将触发故障)而没有任何问题。如果我使用 [childContext existingObjectWithID:objectID]; 我发现它确实总是成功。
作为记录,我已经关闭了子上下文的缓存,并且在调用 [childContext resetContext] 之后发生了同样的行为 - 所以它不是与父上下文不一致的旧缓存数据的假象。
在我看来,仅文档本身不足以解释这种行为。我当然可以把它归结为经验,然后说“我现在知道总是使用existingObjectWithID:将对象ID传递给我的孩子编辑上下文执行块时”但我感到不安,想确切地了解这里发生了什么(不是至少这样我可以理解使用一个对性能是否有任何影响,但也可以理解约束是什么,这样我就可以确保在我的代码中没有不必要地实施一些不好的做法,然后使用错误或低效的调用来修复它)。