最終的に変更されたタイムスタンプを、電話のコアデータレコードとサーバーのmysqlテーブルの両方のデータベースに保存します。
電話機は、最後の同期以降に変更されたすべてのものを検索し、最後の同期のタイムスタンプとともにサーバーに送信します。サーバーは、提供された同期タイムスタンプ以降に変更されたすべてのもので応答します。
多くのレコードが変更された場合、パフォーマンスが問題になります。独自の管理対象オブジェクトコンテキストを持つバックグラウンドNSOpeartionで同期を実行します。バックグラウンドスレッドが管理対象オブジェクトコンテキストへの変更を終了すると、すべての変更をメインスレッドの管理対象オブジェクトコンテキストにマージするためのAPIがあります。これは、次の原因で競合が発生した場合にすべての変更を破棄するように構成できます。同期の進行中にユーザーがデータを変更する。その場合は、数秒待ってから同期を再試行します。
古いハードウェアでは、多くの最適化を行った後でも、ユーザーがアプリで何かを始めた場合は、同期を完全に中止する必要がありました。単にシステムリソースを使いすぎていました。最近のiOSデバイスはおそらく十分に高速であり、もうそれを行う必要はないと思います。
(ちなみに、「多くのレコードが変更された」と言ったときは、電話で30,000行程度が更新または挿入されていることを意味しました)