删除App后iOS iCloud无法恢复

时间:2012-07-21 18:10:55

标签: icloud iso

我正试图让iCloud中的键值存储起作用,我遇到了一个奇怪的问题。

我使用以下方式存储数据:

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

我使用以下方式阅读数据:

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

当我启动和停止App时,这一切都很有效。存储值,我看到正在读取的值。一切都很好。

然后我从我的设备中删除应用程序并再次加载(通过xcode)。现在,我没有看到任何数据来自云端。

iCloud的主要观点之一是您可以删除应用程序然后恢复数据(在我的情况下,游戏保存状态)?

为什么删除我的应用程序并重新安装(在xcode中运行)会导致所有iCloud数据消失?

我在设备上运行它,而不是模拟器。我在iOS 5和iOS 6上尝试过相同的结果。

NSUbiquitousKeyValueStore似乎非常简单易用,但我显然做错了。

2 个答案:

答案 0 :(得分:0)

首先,在读取数据之前尝试进行同步,以确保最新的更新来自iCloud。

您是否有其他可以测试的设备?如果是这样,请在一台设备上运行写入代码,然后在另一台设备上运行读取代码。即使您正在使用NSUbiquitiousKeyValueStore,它也可能在您认为存在的情况下实际同步。它可以在您的设备上运行的原因是键值存储在本地可用,但在iCloud中不可用。因此,当您删除应用时,您将删除本地(也是您唯一的)数据副本。

答案 1 :(得分:0)

我发现你需要注册NSUbiquitousKeyValueStoreDidChangeExternallyNotification通知才能使同步工作。没有它,重新安装后不会保留数据。

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

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

    ...

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

}