2012-07-21 56 views
2

我试图让iCloud中的关键值存储工作,并且遇到了一个奇怪的问题。删除应用程序后,iOS iCloud不能恢复应用程序

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

我使用读取数据:

我使用存储数据

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

这时候我开始和停止所有应用程序的伟大工程。值被存储,我看到正在读取的值。一切安好。

然后我从我的设备上删除应用程序并再次加载它(通过xcode)。现在,我看不到任何数据从云端传出。

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

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

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

NSUbiquitousKeyValueStore看起来非常简单易用,但我显然做错了什么。

回答

0

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

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

0

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

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

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

    ... 

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

} 
相关问题