私のアプリはCoreDataを使用しており(Magical Recordの助けを借りて)、を使用してかなりマルチスレッド化されてNSOperation
います。
もちろん、私はNSManagedObjectID
スレッド/操作の間だけを通過するように非常に注意しています。
ここで、操作で対応する管理対象オブジェクトに戻るために、次の-existingObjectWithID:error:
ように使用します。
Collection *owner = (Collection *)[localContext existingObjectWithID:self.containerId error:&error];
しかし、私が返すのはnilであり、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.
私の場合、これは真実ではありません。そのオブジェクトは存在します。Collection
確かに、そのエンティティのすべてのインスタンスを。で繰り返すNSFetchRequest
と、それらの中にそれが見つかり、それNSManagedObjectID
はまさに私が渡したもの-existingObjectWithID:error:
です。
さらに、-objectWithID:
代わりに使用すると、正しいオブジェクトが正常に返されます。
だから私が欠けているものがあります。ここにいくつかの追加の観察/質問があります:
- 「存在しないオブジェクト」:その文の「存在する」の意味は何ですか?「存在する」どこ?その時点で、それは間違いなく私のCoreDataストアに「存在」します。
- 「障害に対応するオブジェクトが見つかりません」:その文で「見つかった」の意味は何ですか?「見つかった」どこ?その時点で、私のCoreDataストアで間違いなく「見つかりました」。
だから多分私は何をするかに関して何かが欠けて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
か?
悟りをありがとう。