Cocoa touch iCloud键值同步-首次发布

Cocoa touch iCloud键值同步-首次发布,cocoa-touch,icloud,nsubiquitouskeyvaluestore,mkicloudsync,Cocoa Touch,Icloud,Nsubiquitouskeyvaluestore,Mkicloudsync,我正在使用iCloud在设备之间存储同步用户首选项。在设备上,它们存储在NSUserDefaults中的“最喜爱的团队”数组中,我使用它们将它们镜像到NSUbiquitousKeyValueStore。一个设备上的更改会传播到第二个设备 但我不知道如何防止云数据在新安装后的首次发布时被擦除。下面是正在发生的事情: 设备A首次启动。应用程序在云中找不到任何东西。用户在NSUserDefaults中将多个项添加到数组中。更改会立即同步到云 设备B首次启动,但处于脱机状态。用户在NSUserDefau

我正在使用iCloud在设备之间存储同步用户首选项。在设备上,它们存储在
NSUserDefaults
中的“最喜爱的团队”数组中,我使用它们将它们镜像到
NSUbiquitousKeyValueStore
。一个设备上的更改会传播到第二个设备

但我不知道如何防止云数据在新安装后的首次发布时被擦除。下面是正在发生的事情:

  • 设备A首次启动。应用程序在云中找不到任何东西。用户在NSUserDefaults中将多个项添加到数组中。更改会立即同步到云
  • 设备B首次启动,但处于脱机状态。用户在
    NSUserDefaults
    数组中添加一个项目,然后记住该应用程序支持iCloud,因此会找到一些wifi
  • 设备B将其默认版本推送到云(只有一项)。设备A将其拉出来,有效地清除了设备A上添加的所有团队
  • 这是iCloud的局限性还是我的实现太幼稚了?文档解决了“最高级别”同步的类似问题,并添加了应用程序逻辑,以避免用较小的值覆盖此值。当有一些清晰的业务逻辑需要遵循时(更高级别的逻辑总是需要保留的),这很好,但当数据更随意时,我不知道如何确定该做什么


    还是因为我在NSUserDefaults中为“最喜爱的团队”使用了一个数组,并将其全部替换?如果我为每个团队使用单独的密钥,它们可能会根据时间代码独立同步?

    任何时候同步特定密钥的值,都有可能被使用同一帐户的不同设备更改。iCloud服务为您选择赢取的价值,进行更新,并在完成时通知您。这是iCloud和你的应用程序的一个限制,也是为什么同步很困难的一个简单例子。如果上面的第2步看起来像这样会怎样:

    设备B首次启动,iCloud可用。应用程序从设备A下载当前数据。用户改变主意,删除他们在设备A上创建的所有数据。然后他们创建一个新项目

    那怎么办?第3步仍然与您描述的完全一样,只是这次传入的数据是用户想要的。您可以重构数据,但同样的情况仍然可能发生

    一个选项是保留数据的非同步本地副本,以便可以将传入的更改与以前的本地状态进行比较。当他们不一样时该怎么办取决于你。只是不要忘记,即使是戏剧性的变化也可能正是用户想要的,而不是需要修复的同步问题。或者,它们可能会丢失用户想要保留的数据。解决这一冲突是你的工作