在我的应用中,我需要在运行应用的不同设备之间共享设置。我想安装应用程序的第一个设备设置设置的主值,然后所有其他设备应该获得该设置而不是覆盖它。
在设置值之前,如何确保首先检查iCloud是否有值?所以我不会覆盖现有的。
我应该等待发送NSUbiquitousKeyValueStoreInitialSyncChange事件,然后我可以检查最终的现有值,否则第一次设置它?如果是,我可以依赖接收NSUbiquitousKeyValueStoreInitialSyncChange事件吗?如果没有,那么可能会发现它没有使用这种方法设置iCloud值。
如果我在第一次触发NSUbiquitousKeyValueStoreInitialSyncChange之前尝试设置一个值,它是否会被丢弃,然后NSUbiquitousKeyValueStoreInitialSyncChange将被存储中的现有数据触发?
我听说如果第一次同步时商店里没有值,则不会触发NSUbiquitousKeyValueStoreInitialSyncChange吗?
我已阅读Apple文档,并在Stack Overflow上看到了答案,但不明白如何做到这一点。
如何在首次启动/安装应用时确保不覆盖现有值?
答案 0 :(得分:8)
你无法确定你至少有一次与远处商店有效地同步,你不应该依赖它(想象没有设置iCloud帐户,或者没有连接或iCloud服务器关闭等等。:你不希望你的用户等你,以确保你与云同步,因为它可能永远或甚至永远不会发生。)
你应该做什么:
NSUbiquitousKeyValueStore
将认为这是冲突。在这种精确的情况下(初始同步),自动策略是恢复您的本地值,而不是云中的那个。因此,我的应用程序将通过NSUbiquitousKeyValueStoreDidChangeExternallyNotification
原因NSUbiquitousKeyValueStoreInitialSyncChange
通知此应用程序。