1

Webサービスを使用して入力されるCoreDataベースのアプリがあります。ユーザーがWebサービス内のオブジェクトのデータを変更したときに、その変更をWebサービスにプッシュバックしたいと思います。

これを達成するためのベストプラクティスは何ですか?送信する必要のある変更オブジェクトがたくさんある可能性がありますが、ユーザーが接続を持っていない可能性があり、バックグラウンドで実行したいと考えています。

CoreDataでオブジェクトにフラグを付け、リモートで保存する必要がありますか?そして、可能であれば数分ごとにバッチ処理しますか?私はFlurryとGoogleAnalyticsを使用しましたが、彼らはこのようなことをしているに違いありませんが、最善のアプローチが何であるかはわかりません。

おそらく、更新が必要なEntityNameとObjectIDを保持するCoreDataの別のテーブルですか?

4

2 に答える 2

2

NSIncrementalStore、特に AFIncrementalStore (NSIncrementalStore を利用) を調べてください。

ここで両方を議論する良い記事: http://nshipster.com/nsincrementalstore/

于 2012-10-24T16:21:17.993 に答える
2

サーバー API と必要な情報の種類によって多少異なります。

Core Data エンティティに変更フラグまたは日付を追加するのは簡単な方法です。YESフラグがあるすべてのオブジェクト、または日付が最後の同期よりも新しいオブジェクトを探すだけです。ただし、制限があります。オブジェクトを削除したことをサーバーに伝えるにはどうすればよいでしょうか。おそらく、何らかの外部ログを保持する必要があります。たとえば、送信待ちの発信変更を含む plist などです。

私が使用した汎用スキームは次のようになります。

  1. オブザーバーを追加NSManagedObjectContextWillSaveNotification
  2. この通知を受け取ったら、管理対象オブジェクトにinsertedObjectsupdatedObjects、およびdeletedObjectsを要求して、何が変更されたかを調べます。
  3. それらの結果に基づいて、発信変更 plist を更新します。
  4. 同期するときは、plist を読み取り、変更を送信し、リストをゼロにします (送信せずに誤って変更をゼロにしないように、これが保存された通知と同期されていることを確認してください)。

途中で出くわす他の詳細がいくつかあります。たとえば、同期が失敗した場合に送信変更リストを消去しないでください。

于 2012-10-25T00:22:07.277 に答える