8

在我的应用程序中,我需要在运行该应用程序的不同设备之间共享一个设置。我希望安装应用程序的第一台设备设置设置的主值,然后所有其他设备都应该获取该设置而不是覆盖它。

  1. 如何确保在设置值之前先检查 iCloud 是否有值?所以我不会覆盖现有的。

  2. 我是否应该等待发送 NSUbiquitousKeyValueStoreInitialSyncChange 事件,然后我可以检查最终存在的值,否则第一次设置它?如果是,我可以依靠接收 NSUbiquitousKeyValueStoreInitialSyncChange 事件吗?如果不是,那么它可能会证明它根本没有使用这种方法设置 iCloud 值。

  3. 如果我尝试在第一次触发 NSUbiquitousKeyValueStoreInitialSyncChange 之前设置一个值,它会被丢弃,然后 NSUbiquitousKeyValueStoreInitialSyncChange 将使用存储中的现有数据触发吗?

  4. 我听说如果第一次同步时商店中没有值,则不会触发 NSUbiquitousKeyValueStoreInitialSyncChange?

我已阅读有关此内容的 Apple 文档并在 Stack Overflow 上看到了答案,但不明白如何做到这一点。

如何确保在第一次启动/安装应用程序时不会覆盖现有值?

4

1 回答 1

9

您无法确定自己至少与远程商店有效同步了一次,并且您不应该指望它(想象一下没有设置 iCloud 帐户,或者没有连接或 iCloud 服务器已关闭等:您不希望您的用户等待您确保您与云同步,因为这可能需要永远甚至永远不会发生)。

你应该做什么:

  • 开始的时候,检查一下 store 看有没有值。
  • 如果没有价值,就推自己的价值。
  • 如果与服务器的初始同步尚未发生,并且实际上在云中有一个值,那么NSUbiquitousKeyValueStore. 在这种精确的情况下(初始同步),自动策略是恢复您的本地值并更喜欢云中的值。因此,您的应用程序将收到NSUbiquitousKeyValueStoreDidChangeExternallyNotification此恢复NSUbiquitousKeyValueStoreInitialSyncChange原因的通知。
  • 如果云中实际上没有任何价值,那么你的本地价值就会被推高,每个人都会很高兴。
于 2012-09-09T05:33:35.383 回答