私のアプリは(魔法の記録の助けを借りて)コアデータを使用し、NSOperation
を使用してかなり重いマルチスレッドです。コアデータ-existingObjectWithID:エラー:エラー133000を引き起こします
もちろん、スレッド/操作の間でのみNSManagedObjectID
を渡すことに非常に注意しています。
は今、バック操作で対応する管理対象オブジェクトを取得するには、私はこのように-existingObjectWithID:error:
を使用します。
Collection *owner = (Collection *)[localContext existingObjectWithID:self.containerId error:&error];
しかし、私は戻って取得することは皆無であるとerror
が、これはエラー#13300であると言います:NSManagedObjectReferentialIntegrityError
。ここで
は、ドキュメントは、このエラーについてこう言われる、
私の場合は当てはまりませんNSManagedObjectReferentialIntegrityError
Error code to denote an attempt to fire a fault pointing to an object that does not exist.
The store is accessible, but the object corresponding to the fault cannot be found.
:そのオブジェクトが存在します。実際、NSFetchRequest
というエンティティのすべてのインスタンスを反復すると、私はそれを見つけることができます。NSManagedObjectID
は、-existingObjectWithID:error:
に渡したものとまったく同じです。
さらに、私が-objectWithID:
を代わりに使用すると、正しいオブジェクトが正しく返されます。
私には何かがありません。いくつかの追加の観察/質問があります:
- 「存在しないオブジェクト」:その文には「存在する」という意味はありますか? 「存在する」どこ?その時点で私のコアデータストアには「存在する」ことは間違いありません。
- "障害に対応するオブジェクトが見つかりません":その文で "found"の意味は何ですか? "見つけた"どこ?その時点で、私のコアデータストアには必ず "見つかる"ことがあります。
だから、existingObjectWithID:error:
について何か不足していますか?ドキュメントには:
If there is a managed object with the given ID already registered in the context, that object is returned directly; otherwise the corresponding object is faulted into the context.
[...]
Unlike objectWithID:, this method never returns a fault.
これは私の問題を助けるものではありません。私は自分の物体が完全に故障しているのではなく、故障ではない。実際には、オブジェクトプロパティにアクセスすると、その中のどのフォルトも次のコード行で発生します。
NSManagedObjectReferentialIntegrityError
につながる現実的なシナリオは何ですか?
ありがとうございました。
あなたはこれを理解しましたか?私は同じ問題を抱えています。私のオブジェクトは間違いなくそこにあり、セーブ操作は実行中ですが、散発的にしか発生しません。 – Adam