iCloud を使用して、デバイス間の同期ユーザー設定を保存しています。デバイスでは、これらは の「お気に入りのチーム」の配列に保存され、MKiCloudSyncNSUserDefaults
を使用してそれらを にミラーリングしています。1 つのデバイスでの変更が、2 番目のデバイスにうまく伝播しています。NSUbiquitousKeyValueStore
しかし、新規インストール後の最初の起動時にクラウド データが消去されないようにする方法がわかりません。何が起こっているかは次のとおりです。
- デバイス A が初めて起動します。アプリはクラウドで何も検出しません。ユーザーは、NSUserDefaults の配列に複数の項目を追加します。変更はすぐにクラウドに同期されます。
- デバイス B は初めて起動しますが、オフラインです。ユーザーが配列に 1 つのアイテムを追加すると
NSUserDefaults
、アプリが iCloud をサポートしていることを覚えているので、代わりに Wi-Fi を見つけます。 - デバイス B は、そのバージョンのデフォルトをクラウドにプッシュします (アイテムは 1 つだけ)。デバイス A はそれをプルし、デバイス A に追加されたすべてのチームを事実上一掃します。
これはiCloudの制限ですか、それとも私の実装は単純ですか? ドキュメントは、「最高レベル」が同期される同様の問題に対処し、この値を小さい値で上書きしないようにアプリケーション ロジックを追加します。従うべき明確なビジネス ロジックがある場合は問題ありませんが (より高いレベルは常に保持する必要があります)、データがより恣意的である場合、何をすべきかを判断する方法がわかりません。
それとも、「お気に入りのチーム」の NSUserDefaults で配列を使用していて、それを大規模に置き換えているためですか? チームごとに別々のキーを使用した場合、タイム コードに基づいて個別に同期されるのでしょうか?