5

私のアプリは、オブジェクトの配列である NSUbiquityKeyValueStore を使用して、iCloud に単一のキーと値のペアを保存します。配列内のオブジェクトに変更が加えられると、配列全体が iCloud に保存されます。これは、変更がローカルで行われる前に、各デバイスが最新の更新を取得する機会を持っている限り、うまく機能します。そうしないと、他のデバイスの最新の更新が取り出される前にローカルの変更が iCloud にプッシュされ、それらの更新がすべてのデバイスで失われる可能性があります。これは私のアプリの欠点ですか、それとも iCloud の欠点ですか? また、このシナリオが発生しないようにするにはどうすればよいですか?

4

4 に答える 4

2

そうしないと、他のデバイスの最新の更新が取り出される前に、ローカルの変更が iCloud にプッシュされる可能性があります。

今週、私が取り組んでいるプロジェクトで同様の問題に遭遇しました。iCloud から最初のアップデートを受け取るまで、iCloud サーバーには何もプッシュしないように気をつけただけです。また、FWIW、初期化の直後に偽のキーと値のペアを設定して、すぐに更新されるようにしました。

HackyStack のローカル フラグのアイデアも良い解決策です。変更があった場合は、ユーザーにそれを使用するかどうかを尋ねることができます。(Kindle が最新のページに更新するかどうかを尋ねる方法と似ています)。

于 2012-11-17T14:46:36.903 に答える
0

-[NSUBiquitousKeyValueStore synchronize] のドキュメントを読む必要があります。いつ使用するか、およびその制限が何であるかについての適切なアイデアを提供します。特に、実際にいつデータを同期するかについては約束していないことに注意してください。また、更新が iCloud にアップロードされるのは 1 分間にせいぜい数回だけであることに注意してください。アプリだけでなく、アプリ全体)。

キー値ストレージ メカニズムは、非常にシンプルであり、アプリに関する構成情報などの重要でないデータにのみ使用されることを目的としています。基本的に、ユーザーデータ、またはそれに似たものをそこに保存しないでください。そのようなデータには、ファイルベースの iCloud API を使用してください。それらはより複雑ですが、それらを使用すると、データの同期状態をより詳細に把握できます。最も重要なことは、競合について通知され、独自のマージ ハンドラーを提供できることです。

于 2012-11-29T22:06:54.863 に答える
0

正確な問題を完全に理解しているかどうかはわかりませんが、答えは、オブジェクトの「バージョン」を確認するための NSObject のカテゴリ (「バージョン」プロパティを持つことができる場所) であるか、別のキー値が必要であると思いますデバイスにローカルに保存されているもの (lastUpdateVersion) と比較して、自分の立ち位置を知ることができる「バージョン」を iCloud に保存するペア。あなたの問題の正確な実際の例を教えていただければ、もっとうまく答えることができます...「バージョン」ではなく、フラグ(BOOL)が必要な場合があります。

于 2012-11-15T17:35:02.717 に答える