2012-05-08 8 views
3

私が想定していたことは非常に一般的な状況ですが、iOSプログラミングの初心者であるため、コードを書く最適な方法がわかりません。Core Dataとサーバー側のデータを同期させる最適な方法は?

あらすじ:

私はRESTサービスを介してiPhoneアプリで取得することができ、サーバ上のデータを持っています。サーバー側では、データは外部キー(整数ID番号)を持つオブジェクトです。

私は、RESTで取得したデータをコアデータに保存しています。管理対象オブジェクトには「objId」属性があり、残りのコードで管理対象オブジェクトを一意に識別することができます。

私のアプリは常にサーバーのデータを反映している必要があります。サーバーに対して行われた後続の要求で

  • いくつかのオブジェクトが返されないことが、彼らは、サーバー上で削除された - 私はコアデータから対応するオブジェクトを削除する必要があり、その場合には - ように私はサーバーの状態を正しく反映しています。

  • 一部のオブジェクトには属性が変更されているため、対応する管理対象オブジェクトは新しいデータで更新する必要があります。

私の解決策 - あなたへの質問

物事が私のアプリでは、軌道に乗るために、私が使用して作成し、内のすべての新しいオブジェクトを追加し、コアデータ内のすべてのオブジェクトを削除する最も簡単な解決策を作りました最新のサーバー側のデータ

私はこのアプローチに最適な方法だとは思わない:)私は私のアプリケーションで進歩すると、私は今NSFetchedResultsControllerと私のテーブルビューをリンクしたいと思って、すべてを削除し、追加はこれ以上は機能しません。

コアデータをサーバー側のデータと同期させるために試して信頼できる方法は何ですか?

サーバーから戻ってくるオブジェクトIDごとにフェッチ要求を作成し、オブジェクトを新しいデータで更新する必要がありますか?

コアデータ内のすべてのオブジェクトを調べ、どのオブジェクトが更新されていないかを確認し、それらを削除しますか?

これを実行する最善の方法はありますか?コアデータの各オブジェクトのフェッチを行うのはちょっと高価なようです。それだけです。

擬似コードは、すべての答えの罰金です:)事前に

感謝!

答えて

3

さて、ダウンロードを検討してください。まず、バックグラウンドスレッドでこれを実行する必要があります(そうでない場合は、その方法について話しているSOの投稿がたくさんあります)。

まず最初に意味をなさないものを実装してから、Instrumentsを実行して有効なパフォーマンスデータを取得した後、パフォーマンスの最適化を検討することをお勧めします。もちろん、「簡単な」パフォーマンスのものについていくつかの常識を使用してください(あなたの設計は大きなものを十分に簡単に処理できます)。

とにかく、オンラインリソースからデータを取得し、フェッチされたオブジェクトごとに、「一意のオブジェクトID」を使用してコアデータからオブジェクトをフェッチします。そのIDを持つオブジェクトは1つしかないので、フェッチ要求時にfetchLimitを1に設定できます。 「オブジェクトID」属性をデータベースのINDEXに設定することもできます。このようにして、基礎となるデータベースから最も速い検索を取得し、それがあなたの1つのオブジェクトを見つけたら探しを止めることを知っています。これはかなりすこぶるはずです。

これでオブジェクトが作成されました。必要な属性を変更します。保存し、すすぎ、繰り返します。

さらに、いくつかの理由から、オブジェクトがいつ最後に更新されたかを知りたい場合があります。オブジェクトが変更されるたびに現在の時刻で変更される各オブジェクトにタイムスタンプを追加することをお勧めします。これはオブジェクトの削除にも役立ちます。オンラインデータベースでは、どのオブジェクトが削除されるかはわかりませんので、アイテムが「古いもので、もはや必要ではない」ことを知る方法が必要です。

これを行う簡単な方法は、更新を開始した時刻を覚えておくことです。ダウンロードからすべてのオブジェクトを処理した後、オンラインデータベースから削除されたすべてのオブジェクトを見つける方法が用意されました。基本的には、更新を開始した時刻より前の「最終更新」タイムスタンプを持つオブジェクトは削除する必要があります(最後の更新で追加または変更されていないため)。このフィールドでデータベースを索引付けすることもできます。データベースが巨大でない限り、これらのオブジェクトをより早く見つけることができます。

+0

ありがとうございました!そこに私が物事をやっているやり方を再設計するのに本当に役立つヒントがたくさんあります。 – Stretch

関連する問題