これら 2 つの呼び出しの文書化された違いを理解しています。ただし、私が気付いた次の観察された動作の理由を知っている人はいますか?
parentContext と一時的な childContext がある場合、ここで childContext を使用してオブジェクトを編集、挿入、および削除します。親コンテキストに存在する既知の既存の管理対象オブジェクトを取得するために、起動時に失敗して例外を生成する障害のあるオブジェクトが表示されることがあります。objectWithID: は、設計上、指定された objectID に対して実際の managedObject が存在するかどうかに関係なく、常に障害状態のオブジェクトを返すことを理解しています。ただし、オブジェクトが実際に親コンテキストに存在する場合、プロパティのいずれかにアクセスすると、オブジェクトは常に問題なく親コンテキストから正常に取得される (たとえば、障害が発生する) と予想されます。[childContext existingObjectWithID:objectID]; を使用すると、私はそれが確かに常に成功することを発見しました。
記録のために、私は子コンテキストのキャッシュをオフにしましたが、これと同じ動作は [childContext resetContext] が呼び出された後に発生します。つまり、親コンテキストと矛盾する古いキャッシュ データのアーティファクトではありません。
ドキュメントだけでは、この動作を説明するには不十分なようです。もちろん、経験に基づいて「常に既存のObjectWithIDを使用することを知っています。オブジェクトIDを子編集コンテキスト実行ブロックに渡すとき」と言うことができますが、不安を感じ、ここで何が起こっているのかを正確に理解したいと思います(少なくとも、一方を他方よりも使用することでパフォーマンスに影響があるかどうかを理解できるだけでなく、制約が何であるかを理解して、コードに不必要に実装してからそれを修正するための間違ったまたは非効率的な呼び出し)。