我正在使用iCloud在设备之间存储同步用户首选项。在设备上,这些存储在NSUserDefaults
中的“收藏团队”数组中,我使用MKiCloudSync将其镜像到NSUbiquitousKeyValueStore
。一台设备上的更改正在传播到第二台设备。
但我不确定如何防止在新安装后首次启动时擦除云数据。以下是发生的事情:
NSUserDefaults
数组,然后记住该应用程序支持iCloud,因此找到一些wifi。 这是iCloud的限制还是我的实施天真?这些文档解决了一个类似的问题,即同步“最高级别”,并添加应用程序逻辑,以便永远不会用较小的值覆盖此值。当有一些明确的业务逻辑要遵守时(更高级别始终是要保持的),这很好,但是当数据更加随意时,我不知道如何确定要做什么。
或者是因为我在NSUserDefaults中使用一个数组来代表“最喜欢的团队”并将其替换为批发?如果我为每个团队使用单独的密钥,他们可能会根据时间码独立同步吗?
答案 0 :(得分:1)
每当您为特定密钥同步某个值时,您都会面临使用同一帐户由其他设备更改的风险。 iCloud服务为您选择获胜值,进行更新,并在完成后通知您。这是iCloud和您的应用程序的限制,并且是为什么同步很难的简单示例。如果您上面的第2步看起来像这样:
那么,那么呢?第3步仍然完全按照您的描述进行,但这次传入的数据是用户想要的。你可以重构你的数据,但仍然可能出现同样的情况。设备B首次启动,iCloud可用。该应用程序从设备A下载当前数据。用户改变主意并删除他们在设备A上创建的所有数据。然后他们只有一个新项目。
一种选择是保留数据的非同步本地副本,以便您可以将传入的更改与先前的本地状态进行比较。当他们与众不同时该做什么取决于你。只是不要忘记即使是戏剧性的变化也可能正是用户想要的,而不是需要修复的同步问题。或者,它们可能会丢失用户想要保留的数据。解决这个冲突是你的工作。