我正在使用 iCloud 在设备之间存储同步用户首选项。在设备上,这些存储在 'Favorite Teams' 数组中NSUserDefaults
,我正在使用MKiCloudSync将它们镜像到NSUbiquitousKeyValueStore
. 一台设备上的更改正在传播到第二台设备。
但我不确定如何防止在新安装后首次启动时擦除云数据。这是正在发生的事情:
- 设备 A 首次启动。应用程序在云中找不到任何东西。用户将多个项目添加到 NSUserDefaults 中的数组中。更改会立即同步到云端。
- 设备 B 首次启动,但处于离线状态。用户将单个项目添加到
NSUserDefaults
数组中,然后记住应用程序支持 iCloud,因此找到了一些 wifi。 - 设备 B 将其默认版本推送到云端(只有一项)。设备 A 将其拉出,有效地消灭了设备 A 上添加的所有团队。
这是 iCloud 的限制还是我的实现幼稚?文档解决了同步“最高级别”的类似问题,并添加了应用程序逻辑以永远不会用较小的值覆盖该值。当有一些明确的业务逻辑要遵守时,这很好(更高级别始终是要保留的),但是当数据更加随意时,我不知道如何确定要做什么。
或者是因为我在 NSUserDefaults 中为“最喜欢的团队”使用了一个数组并批发替换它?如果我为每个团队使用单独的密钥,也许它们会根据时间码独立同步?