3

iCloud でキー バリュー ストアを機能させようとしていますが、奇妙な問題が発生しています。

以下を使用してデータを保存します。

[[NSUbiquitousKeyValueStore defaultStore] setObject:@"SomeValue" forKey:@"SomeKey"];
[[NSUbiquitousKeyValueStore defaultStore] synchronize];

次を使用してデータを読み取ります。

someValue = [[NSUbiquitousKeyValueStore defaultStore] objectForKey:@"SomeKey"];

アプリを開始および停止すると、これはすべてうまく機能します。値が保存され、値が読み取られていることがわかります。すべて順調。

次に、デバイスからアプリを削除し、再度ロードします (xcode 経由)。現在、クラウドからデータが降りてくる様子はありません。

アプリを削除してデータ(私の場合はゲームのセーブ状態)を復元できるのもiCloudの大きなポイントの一つではないでしょうか。

アプリを削除して再インストール (xcode で実行) すると、すべての iCloud データが消えるのはなぜですか?

シミュレーターではなく、デバイスでこれを実行しています。iOS 5 と iOS 6 で試してみましたが、結果は同じでした。

NSUbiquitousKeyValueStore は非常に使いやすいように見えますが、明らかに何か間違っています。

4

2 に答える 2

0

まず、データを読み取る前に同期してみて、最新の更新が iCloud から届いていることを確認してください。

テストできる別のデバイスはありますか? その場合は、あるデバイスで書き込みコードを実行してから、別のデバイスで読み取りコードを実行します。NSUbiquitiousKeyValueStore を使用していても、実際には同期していると思われるときに同期していない可能性があります。デバイスで機能する理由は、キー バリュー ストアがローカルで利用できるが、iCloud では利用できないためです。したがって、アプリを削除すると、データのローカル (および唯一の) コピーが削除されます。

于 2012-07-23T04:43:39.817 に答える
0

同期を機能させるには、NSUBiquitousKeyValueStoreDidChangeExternallyNotification 通知に登録する必要があることがわかりました。これがないと、再インストール後にデータが保持されません。

- (void)iCloudKeyStateChanged:(NSNotification*)n {
}

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {

    ...

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(iCloudKeyStateChanged:) name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification object:nil];

}
于 2014-03-06T07:17:36.893 に答える