私は、サーバー (XML、JSON など) からデータを取得する通常の iPhone アプリに取り組んでおり、同期データを実装する最良の方法は何か疑問に思っています。基準は、速度 (ネットワーク データ交換が少ない)、堅牢性 (更新が失敗した場合のデータ回復)、オフライン アクセス、および柔軟性 (新しい列のように、データベースの構造がわずかに変更された場合に適応可能) です。アプリによって異なることは承知していますが、戦略や経験を共有していただけますか?
私の場合、次のようなことを考えています。
1) 最終更新日をiPhoneに保存する
2) 起動時に、getNewData.php?lastModifiedDate=... のようなメッセージを送信します。
3) サーバーは、前回から変更されたデータのみを処理して送り返します。
4) このデータは次のようにフォーマットされています。
<+><data id="..."></data></+> // add this to SQLite/CoreData
<-><data id="..."></data></-> // remove this
<%><data id="..."><attribute>newValue</attribute></data></%> // new modified value
<+>、<->、<%>... を各属性に対しても作成したくないのは、複雑すぎるためです。おそらく <%> フィールドを受け取ったときに、データを削除するだけです指定された id を使用して、再度追加します (ここでの id は、自動的に自動インクリメントされるフィールドではないと仮定します)。
5) すべてをダウンロードして更新したら、[最終更新日] フィールドを更新します。
この戦略の主な問題は、何かを更新しているときにネットワークがダウンした場合 => 最終更新日がまだ更新されていない => 次回アプリを再起動したときに、同じことをもう一度繰り返さなければならないことです。矛盾する可能性のあるデータは言うまでもありません。更新に一時テーブルを使用してすべてをアトミックにすればうまくいきますが、更新が長すぎる (大量のデータ変更) 場合、ユーザーは新しいデータが利用可能になるまで長時間待たなければなりません。各データ フィールドに Last-Modified-Date を使用し、データを徐々に更新する必要がありますか?