第一次启动时,iCloud KeyValue存储未被识别

我的应用程序使用iCloud(键值存储)在多个设备之间同步唯一的ID。 这个作品在应用程序第一次启动的时候就被认为是真正的工作了。 它看起来像设备还没有熟悉的iCloud的价值观在第一次启动,只有在应用程序安装并已运行了一段时间。

我检查应用程序主视图的viewDidLoad函数中的iCloud值。

所以,我的问题是:

  • 这是预期的行为?
  • 如果是的话,还有其他解决scheme吗?
  • 难道这只是从Xcode运行而不是运输版本的问题? 如果是的话,如何testing?

谢谢!

碧玉

当您第一次运行启用了iCloud的应用程序时,必须从苹果服务器上提取所有数据。 这样做的时间取决于很多事情,比如你现在使用什么样的networking(Edge,3G,GPRS,WLAN)。 这还取决于iCloud服务器当前必须处理多lessstream量,因此无论您使用何种types的networking连接,对iCloud服务器的请求都可能需要几秒钟的时间。

总结一下:是的,这听起来很正常。

如果运行您的应用程序取决于这些设置,只要应用程序执行初始同步并从云端加载所有需要的数据,请考虑实施屏幕上的“等待”或“加载”视图。 为了不阻止用户界面永远也实现此视图的超时(如果iCloud数据未加载X秒内,closures视图和通知用户)。

我有一个类似的问题,NSUbiquitousKeyValueStoreDidChangeExternallyNotification没有在安装后第一次启动时触发,无论我等待多久。 在NSUBiquitousKeyValueStore中设置一个初始密钥似乎解决了这个问题。

在将观察者添加到默认商店之后立即调用:

[[NSUbiquitousKeyValueStore defaultStore] setString:@"testValue" forKey:@"testKey"]; [[NSUbiquitousKeyValueStore defaultStore] synchronize]; 

我使用不同的键(即不是testKey )为我想要同步的实际数据。

您无法保证NSUbiquitousKeyValueStore在首次启动您的应用程序时将完成首次同步。 (事实上​​,在iOS 5上,首次启动应用程序时,通常会开始同步)。

没有办法知道第一个初始同步是否已经发生,正在进行或已经完成。 你可以(实际上应该 )订阅NSUbiquitousKeyValueStoreDidChangeExternallyNotification 。 诀窍是,如果您的商店在iCloud服务器上是空的,在初始同步之后您将不会收到任何通知(因为您的本地商店是空的,并且云商店也是空的,所以在初始化之后“外部”同步…)

通常情况下,您不应该依赖于正在完成的初始同步。

即使你的商店是空的,也要乐观主义者推出你的价值观(例如你的独特的身份证)。 如果初始同步同时发生或之后,服务器上已经有一些值,您的本地值将重置为服务器值,您将NSUbiquitousKeyValueStoreDidChangeExternallyNotification通知与NSUbiquitousKeyValueStoreInitialSyncChange原因。

最后,如果你真的想知道初始同步是否完成,请向bugreport.apple.com提交一个错误,并解释为什么你确实需要这个错误。