8

私のアプリでは、アプリを実行しているさまざまなデバイス間で設定を共有する必要があります。アプリをインストールする最初のデバイスに設定のマスター値を設定してもらいたいのですが、他のすべてのデバイスはその設定を取得し、上書きしないようにする必要があります。

  1. 値を設定する前に、iCloudに値があるかどうかを最初に確認するにはどうすればよいですか?したがって、既存のものを上書きしません。

  2. NSUbiquitousKeyValueStoreInitialSyncChangeイベントが送信されるのを待つ必要があります。そうすれば、最終的な既存の値を確認して、それ以外の場合は初めて設定できますか?はいの場合、NSUbiquitousKeyValueStoreInitialSyncChangeイベントの受信に依存できますか?そうでない場合は、このアプローチではiCloudの値がまったく設定されないことが判明する可能性があります。

  3. NSUbiquitousKeyValueStoreInitialSyncChangeが初めてトリガーされる前に値を設定しようとすると、その値は破棄され、ストア内の既存のデータでNSUbiquitousKeyValueStoreInitialSyncChangeがトリガーされますか?

  4. 初回同期時にストアに値がない場合、NSUbiquitousKeyValueStoreInitialSyncChangeがトリガーされないと聞きました。

私はこれに関するAppleのドキュメントを読み、Stack Overflowで回答を見ましたが、これを正確に行う方法がわかりません。

アプリを初めて起動/インストールするときに既存の値を上書きしないようにするにはどうすればよいですか?

4

1 に答える 1

9

少なくとも一度は離れたストアと効果的に同期したことを確実に知る方法はなく、それを当てにするべきではありません(iCloudアカウントが設定されていない、接続がない、iCloudサーバーがダウンしているなどを想像してください)。クラウドと同期していることを確認するのをユーザーが待たないようにしてください。クラウドとの同期には永遠に時間がかかるか、まったく起こらない可能性があります)。

あなたがすべきこと:

  • 開始するときは、ストアをチェックして値があるかどうかを確認してください。
  • 価値がない場合は、自分の価値を押してください。
  • サーバーとの最初の同期がまだ行われておらず、実際にクラウドに値がある場合、これはによって競合と見なされますNSUbiquitousKeyValueStore。この正確なケース(初期同期)では、自動ポリシーはローカル値を元に戻し、代わりにクラウド内の値を優先することです。NSUbiquitousKeyValueStoreDidChangeExternallyNotificationしたがって、アプリケーションには、この復帰のNSUbiquitousKeyValueStoreInitialSyncChange理由とともに通知されます。
  • クラウドに実際に価値がなかった場合、あなたのローカルな価値が押し上げられ、誰もが幸せになります。
于 2012-09-09T05:33:35.383 に答える