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 回答