8

私のアプリは、iCloud (キー値ストア) を使用して、複数のデバイス間で一意の ID を同期します。これは、アプリの最初の起動時に、実際に機能する必要がある場合に受け入れられます。デバイスは、最初の起動時に iCloud からの値にまだ慣れていないようです。アプリがインストールされ、しばらく実行された後でのみです。

アプリのメイン ビューの viewDidLoad 関数で iCloud の値を確認します。

だから、私の質問:

  • これは予想される動作ですか?
  • はいの場合、別の解決策はありますか?
  • これは、出荷バージョンではなく、Xcode から実行する場合にのみ問題になるのでしょうか? もしそうなら、どのようにテストするのですか?

ありがとう!

碧玉

4

3 に答える 3

2

iCloud 対応アプリを初めて実行するときは、Apple サーバーからすべてのデータをプルする必要があります。これにかかる時間は、現在使用しているネットワークの種類 (Edge、3G、GPRS、WLAN) などの多くの要因によって異なります。また、iCloud サーバーが現在処理しなければならないトラフィックの量にも依存するため、使用しているネットワーク接続の種類に関係なく、iCloud サーバーへの要求にはさらに数秒かかる場合があります。

要約すると、はい、まったく正常に聞こえます。

アプリの実行がこれらの設定に依存している場合は、アプリが最初の同期を実行し、クラウドから必要なすべてのデータをロードするのにかかる限り、画面に表示されたままになる「待機」ビューまたは「ロード中」ビューを実装することを検討してください。UI を永久にブロックしないようにするには、このビューのタイムアウトも実装します (iCloud データが X 秒以内に読み込まれない場合は、ビューを閉じてユーザーに通知します)。

于 2012-07-16T16:32:09.393 に答える
1

NSUbiquitousKeyValueStoreアプリが初めて起動されるため、最初の同期が完了したという保証はありません。(実際、iOS 5 では、アプリを初めて起動したときに同期を開始することがよくあります)。

最初の初期同期が既に行われたか、進行中であるか、または終了したかを知る方法はありません。に登録できます (実際、登録する必要があります) NSUbiquitousKeyValueStoreDidChangeExternallyNotification。秘訣は、iCloud サーバーでストアが空の場合、最初の同期後に通知を受け取らないことです (ローカル ストアが空であり、クラウド ストアも空であるため、最初の同期後に「外部的に」何も変更されていません)。同期…)

通常、実行中の初期同期に依存するべきではありません。

あなたのストアが空であっても、立ち上げ時には楽観主義者になりましょう。最初の同期が同時または後に発生し、サーバーにすでに何らかの値がある場合、ローカルの値はサーバーの値にリセットされ、理由NSUbiquitousKeyValueStoreDidChangeExternallyNotificationとともに通知を受け取ります。NSUbiquitousKeyValueStoreInitialSyncChange

最後に、最初の同期が完了しているかどうかを本当に知りたい場合は、bugreport.apple.com にバグを報告し、本当にそれが必要な理由を説明してください。

于 2012-07-20T01:50:49.100 に答える