在设置值之前等待现有的iCloud值?

the*_*jaz 8 objective-c ios ios5 icloud nsubiquitouskeyvaluestore

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

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

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

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

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

我已经阅读了关于这个的Apple文档,并在Stack Overflow上看到了答案,但是不明白如何做到这一点.

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

Jul*_*ien 8

你无法确定你已经有效地与远处的商店同步至少一次,你不应该依赖它(想象没有设置iCloud帐户,或没有连接或iCloud服务器关闭等等.你不希望您的用户等待您确保您与云同步,因为它可能需要永久甚至永远不会发生.

你应该做什么:

  • 当你开始时,检查商店以查看是否有值.
  • 如果没有价值,只需推出自己的价值.
  • 如果与服务器的初始同步尚未发生,并且实际上云中存在一个值,那么这将被视为冲突NSUbiquitousKeyValueStore.在这种精确的情况下(初始同步),自动策略是恢复您的本地值,而不是云中的那个.因此,您的应用程序将通过NSUbiquitousKeyValueStoreDidChangeExternallyNotification此恢复通知NSUbiquitousKeyValueStoreInitialSyncChange原因.
  • 如果云中实际上没有价值,那么您的本地价值将被推动,每个人都会感到高兴.