首次启动时无法识别iCloud KeyValue存储

Jas*_*Bel 8 objective-c key-value-store ios icloud

我的应用程序使用iCloud(键值存储)来同步多个设备之间的唯一ID.在第一次启动应用程序时,这项工作接受了它真的必须工作.看起来设备在首次启动时还不熟悉iCloud的值,只有在安装了应用程序并且已运行一段时间之后.

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

所以,我的问题:

  • 这是预期的行为吗?
  • 如果是,是否有另一种解决方案?
  • 可能是这种情况从Xcode运行时只是一个问题,而不是运输版本?如果是这样,如何测试?

谢谢!

碧玉

小智 8

我曾在NSUbiquitousKeyValueStoreDidChangeExternallyNotification不触发第一个发射后安装,不管多久,我等了类似的问题.在NSUBiquitousKeyValueStore中设置初始密钥似乎解决了这个问题.

将观察者添加到默认存储后,我立即调用:

[[NSUbiquitousKeyValueStore defaultStore] setString:@"testValue" forKey:@"testKey"];
[[NSUbiquitousKeyValueStore defaultStore] synchronize];
Run Code Online (Sandbox Code Playgroud)

我使用不同的键(即不是testKey)来表示我想要同步的实际数据.


Bjö*_*ser 2

当您第一次运行支持 iCloud 的应用程序时,它必须从 Apple 服务器提取所有数据。执行此操作所需的时间取决于许多因素,例如您当前使用的网络类型(Edge、3G、GPRS、WLAN)。它还取决于 iCloud 服务器当前必须处理的流量有多少,因此无论您拥有哪种类型的网络连接,对 iCloud 服务器的请求都可能需要几秒钟的时间。

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

如果运行您的应用程序取决于这些设置,请考虑实施“等待”或“加载”视图,只要应用程序执行初始同步并从云加载所有需要的数据,该视图就会保留在屏幕上。为了不永远阻止 UI,还可以为此视图实现超时(如果 iCloud 数据未在 X 秒内加载,则关闭视图并通知用户)。