1

ストレージ機能に Core Data を使用しています。ある時点で、ローカル オブジェクト グラフを更新する必要がある外部 API 呼び出しを行います。私の現在の (ばかげた) 計画は、古い NSManagedObjects のすべてのインスタンスを (それらが更新されているかどうかに関係なく) クリアし、それらを新しい同等のものに置き換えることです。一種の切り札のマージ ポリシーです。

これを行うためのより良い方法があるように感じます。サーバーからの一意の識別子を持っているので、それらをストア内のオブジェクトと照合できるはずです。識別子によってコンテキストからオブジェクトを手動でフェッチし、各プロパティをリセットせずにこれを行う方法はありますか? 完全に新しいコンテキストを作成し、オブジェクト グラフを再生成し、それを Core Data に渡して一意の識別子に基づいてマージする方法はありますか?

4

1 に答える 1

0

サーバーの一意の ID に基づくマッチング戦略は、優れたアプローチです。うまくいけば、最後の更新時以降に変更されたオブジェクトのみをサーバーに配信させることができます (これを追跡し、サーバー呼び出しで提供します)。

ただし、Core Data オブジェクトを更新するには、それらをフェッチし、NSManagedObjects をインスタンス化し、変更を加えて保存する必要があります。これはすべてバックグラウンド スレッド (子コンテキスト、performBlock:) で行うことができますが、オブジェクトをメモリに往復して保存する必要があります。子コンテキストと独自のスレッドでそれを行うと、UI はきびきびした状態に保たれますが、それでも処理を行う必要があります。

別のアイデア: 先週かそこらで、コア データ プロパティをオンデマンドで提供し、ローカルにキャッシュするために使用AFIncrementalStoreするNSIncrementalStore実装について読んでいました。AFNetworking私はまだそれを使って何も構築していませんが、かなり滑らかに見えます。あなたのプロジェクトがこのライブラリをうまく利用しているように思えます。コードは GitHub にあります: https://github.com/AFNetworking/AFIncrementalStore

于 2013-03-27T18:00:11.870 に答える