iCloud Key Value Sync - 首次发布

时间:2013-06-16 02:48:50

标签: cocoa-touch icloud nsubiquitouskeyvaluestore mkicloudsync

我正在使用iCloud在设备之间存储同步用户首选项。在设备上,这些存储在NSUserDefaults中的“收藏团队”数组中,我使用MKiCloudSync将其镜像到NSUbiquitousKeyValueStore。一台设备上的更改正在传播到第二台设备。

但我不确定如何防止在新安装后首次启动时擦除云数据。以下是发生的事情:

  1. 设备A首次启动。应用程序在云中找不到任何内容用户在NSUserDefaults中向阵列添加多个项目。更改会立即同步到云端。
  2. 设备B首次启动,但处于脱机状态。用户将一个项目添加到NSUserDefaults数组,然后记住该应用程序支持iCloud,因此找到一些wifi。
  3. 设备B将其默认版本推送到云端(只有一个项目)。设备A将其拉出,有效地消除了设备A上添加的所有团队。
  4. 这是iCloud的限制还是我的实施天真?这些文档解决了一个类似的问题,即同步“最高级别”,并添加应用程序逻辑,以便永远不会用较小的值覆盖此值。当有一些明确的业务逻辑要遵守时(更高级别始终是要保持的),这很好,但是当数据更加随意时,我不知道如何确定要做什么。

    或者是因为我在NSUserDefaults中使用一个数组来代表“最喜欢的团队”并将其替换为批发?如果我为每个团队使用单独的密钥,他们可能会根据时间码独立同步吗?

1 个答案:

答案 0 :(得分:1)

每当您为特定密钥同步某个值时,您都会面临使用同一帐户由其他设备更改的风险。 iCloud服务为您选择获胜值,进行更新,并在完成后通知您。这是iCloud和您的应用程序的限制,并且是为什么同步很难的简单示例。如果您上面的第2步看起来像这样:

  

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

那么,那么呢?第3步仍然完全按照您的描述进行,但这次传入的数据是用户想要的。你可以重构你的数据,但仍然可能出现同样的情况。

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