我正试图让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似乎非常简单易用,但我显然做错了。
答案 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];
}