コア データを iCloud と同期すると、すべてのレコードが 2 倍になることがあります。これは、アプリがまだデータを同期していない再インストール時に発生し、新しいデータセットが作成され、iCloud が同期され、モデルごとに各レコードが 2 倍になると考えられます。
この種の動作を防ぐ方法はありますか? 現在、すべてのモデルの読み込みとデータ同期の重複をチェックしていますが、これは面倒でハックのようです。
コア データを iCloud と同期すると、すべてのレコードが 2 倍になることがあります。これは、アプリがまだデータを同期していない再インストール時に発生し、新しいデータセットが作成され、iCloud が同期され、モデルごとに各レコードが 2 倍になると考えられます。
この種の動作を防ぐ方法はありますか? 現在、すべてのモデルの読み込みとデータ同期の重複をチェックしていますが、これは面倒でハックのようです。
iCloud はデバイス間でデータを非同期的に転送するため、iCloud コンテナにデータを追加してから実際に転送されるまでにかなりの時間がかかる場合があります。メタデータはデバイス間で高速に転送されますが、これでもかなり遅延する可能性があります。
これが重要な理由は、データがまだ iCloud に追加されていないことを保証するテストを 1 つのデバイスで実行できないためです。1 つのデバイスがデータをシードしている可能性がありますが、ファイル/メタデータのアップロードはまだ開始されていません。その時点で、2 番目のデバイスは、最初のデバイスからシードされたデータについて知ることができません。
Apple のアドバイスは、マージのたびにデータの重複除去を行うことでこれを処理することです。各デバイスは独自のシード データを追加するだけで、それが 2 回追加されていることがわかった場合は、対応するオブジェクトが各デバイスで削除されるように注意しながら、その半分を削除します。
このアプローチは機能しますが、少しハックのように感じます。私のEnsemblesフレームワークで使用されている別の方法は、同期フレームワークがシード データを自動的にインポートしてマージできるように、オブジェクトにグローバル識別子を提供することです。これが Ensembles で採用されているアプローチであり、データのシードがかなり簡単になり、その場しのぎが少なくなります。
iCloud ストアだけを使おうとするのは愚かなことです。データはローカルと iCloud の両方に保存する必要があります。そうしないと、深刻な問題が発生します。
コア データが必要な場合は、MagicalRecordを使用します。