マルチスレッド コンテキストで使用される objectID に関連する問題があります。
次のように、objectID を使用して、バックグラウンド スレッドによって呼び出される完了ブロックをエンティティに渡します。
NSManagedObjectID *entityID = [entity objectID];
[self.queue enqueue:
^{
NSManagedObjectContext *managedObjectContext = // child moc on a bg thread
Entity *entity = (Entity *)[managedObjectContext objectWithID:entityID];
/* Work using the entity */
}];
これは、ネットワーク リクエストの進行中にエンティティの削除を開始するまで正常に機能していました (残念ながら、単純にキャンセルすることはできません)。
この問題を解決するために、代わりに NSManagedObjectContext の existingObjectWithID: メソッドを使い始めました。利点は、オブジェクトが存在しない場合は nil を返すことですが、別の問題に遭遇しました。オブジェクトが実際に存在するにもかかわらず、objectID が一時的な場合、existingObjectWithID は nil を返します。
エンティティが作成されたときに GetPermanentIDsForObjects を使用してみましたが、これは永続ストアでの作業を意味し、ランダムにクラッシュするため、理想的ではありません。
非同期ネットワーク要求の完了時にエンティティがまだ存在することを確認する適切な方法はありますか?
前もって感謝します !