Web API から取得した Core Data にオブジェクトをインポートする NSOperationQueue があります。各操作には、アプリのメインの managedObjectContext のプライベートな子 managedObjectContext があります。各操作は、インポートするオブジェクトを取得し、オブジェクトが既に存在するかどうかを確認します。存在する場合は、既存のオブジェクトを更新します。オブジェクトが存在しない場合、この新しいオブジェクトが作成されます。プライベートな子コンテキストでのこれらの変更は、メインの管理対象オブジェクト コンテキストまで伝播されます。
このセットアップは私にとっては非常にうまく機能しましたが、重複の問題があります。
同じオブジェクトを 2 つの異なる同時操作でインポートすると、まったく同じデータを持つ重複したオブジェクトが得られます。(どちらもオブジェクトが存在するかどうかを確認しますが、既に存在しているようには見えません)。2 つの同じオブジェクトをほぼ同時にインポートする理由は、「get」API 呼び出しだけでなく「新しい」API 呼び出しも頻繁に処理するためです。私の設定は同時に非同期であるため、インポートしようとしているオブジェクトが重複しないようにするのは困難です。
だから私の質問は、この特定の問題を解決する最良の方法は何ですか? インポートを最大同時操作数 1 に制限することを考えました (パフォーマンスのためにこれは好きではありません)。同様に、すべてのインポート操作の後に保存を要求し、コンテキストのマージを処理しようとすることを検討しました。また、後でデータをグルーミングして、重複を時々クリーンアップすることも検討しました。そして最後に、すべてのフェッチ要求で重複を処理することを検討しました。しかし、これらの解決策のどれも私には素晴らしいとは思えません。おそらく、私が見落とした簡単な解決策があるでしょう。