マップに注釈を追加する必要があります。各注釈には、リモート サーバーからフェッチされている対応する Place リソースがあります。各場所には関連付けられたカテゴリがあります。これもサーバーから個別のリソースとして取得されます。
特定の地域に居住するために、それぞれが 20 のカテゴリの 1 つに属する 100 の場所を取得する必要があるとします (実際には、さらに多くのカテゴリがあります)。
AFNetworking を使用して両方のリソースをフェッチします。場所とカテゴリの両方をオフラインで使用できるようにキャッシュしようとしているので、注釈がマップに表示される前に、取得したリソースを Core Data テーブルに書き込みます。
各場所は、関連するカテゴリ リソースを必要に応じて取得します。場所を「場所」テーブルに、カテゴリを「カテゴリ」テーブルに書き込む必要があります。
フェッチは非同期で行われるため、特定のカテゴリをテーブルに書き込むときに、別の場所の「スレッド」が同じ関連付けられたカテゴリを「カテゴリ」テーブルに書き込もうとしているかどうかはわかりません。
そこで問題は、非同期で取得した情報をコア データ テーブルに入力する必要がある場合に、コア データ テーブルを操作するためのパターンは何かということです。具体的には、カテゴリを書き込もうとしている特定のスレッドが、それを行おうとしているスレッドが既に存在することをどのように知ることができるのでしょうか?
更新 1: 現在の問題は、現在、カテゴリが重複していることです。私の推測では、明らかに、書き込まれようとする各カテゴリは、同じカテゴリの並列書き込みについて認識していません。
更新 2: 私の場合の最も簡単な説明は次のとおりです。
あるスレッドでいくつかのフィールドを持つ新しいカテゴリ エンティティを作成し、その間に別のスレッドで、最初のスレッドと同じカテゴリ オブジェクトを目指して同じフィールドを持つまったく同じカテゴリ エンティティを作成します。
1 つのスレッドが[managedObjectContext save:&error]の呼び出しに勝ちますが、実際のレコードが PersistentStore に表示される前に、2 番目のスレッドも保存を呼び出します。問題は、「カテゴリ」テーブルでレコードの重複を防ぐ方法です。
更新 3: 管理オブジェクト コンテキストを使用する両方のバリアントを検討しています: 1) すべてのスレッドで 1 つの共有 moc インスタンスを再利用する 2) 各スレッドで新しい moc をインスタンス化する
ありがとう!