当涉及多个设备时,Core Data iCloud 迁移“丢失”数据

Posted

技术标签:

【中文标题】当涉及多个设备时,Core Data iCloud 迁移“丢失”数据【英文标题】:CoreData iCloud Migration "looses" data when more than one device is involved 【发布时间】:2013-11-18 13:05:08 【问题描述】:

我最近在更新我的应用时遇到了一些重大问题。许多用户在迁移到最新版本后抱怨数据丢失。

几个小时后,我仍然不确定发生了什么,但我想确认一个理论。

在 Apple 的文档中说:

迁移和 iCloud

对于与给定 NSPersistentStoreUbiquitousContentNameKey 关联的每个模型版本,对存储的更改都会被独立记录和保存。如果模型版本匹配,使用给定 NSPersistentStoreUbiquitousContentNameKey 配置的持久性存储仅将数据与另一个设备上的存储数据同步。

如果您将配置了 NSPersistentStoreUbiquitousContentNameKey 选项的持久性存储迁移到新模型版本,该存储的源自当前设备的更改历史记录也将被迁移,然后与配置有该新模型版本的任何其他设备合并

这是否意味着当我拥有多个设备并迁移第一个设备时。并非源自该设备的所有数据都会“丢失”,因为在其他设备也更新到最新版本并且其数据和更改历史记录迁移到新模型版本之前,模型版本不再匹配。

因为这似乎是我可以复制问题的一种风景。真的是这样吗?感谢您提供任何帮助和见解...

【问题讨论】:

这似乎更糟。由于 ios7 之后,一个 App 删除一个再次安装也会获得一个新的 peerID。迁移后重新安装应用程序时,仅将重新安装后添加的数据迁移到新模型。早期的数据会丢失。我仍然觉得我在这里遗漏了一些东西,因为我似乎找不到其他有这种问题的人? 【参考方案1】:

这几乎是正确的。如果两台设备使用不同版本的数据模型,则它们无法相互同步。在这种情况下,数据不会“丢失”,但同步会停止。升级所有设备后,应恢复同步。

我不知道你的情况是不是这样,但这就是那些文档试图告诉你的。

【讨论】:

如果是这样是不是有很大的无法解决的问题?如果:设备 1 创建记录 -> 设备 2 更改记录 -> 设备 1 升级 -> 现在记录再次处于未更改的初始状态(因为只有创建被迁移到新模式) -> 设备被出售并且永远不会升级 -> 来自设备 2 的更改丢失(因为它们永远不会更新并合并到设备 1)? 用户需要协调他们的设备升级,以确保不会出现上述情况。一旦升级了一台设备,它将无法导入其他设备使用旧版本生成的任何更改日志。将此添加到升级说明中...

以上是关于当涉及多个设备时,Core Data iCloud 迁移“丢失”数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 iCloud 在多台设备上同步 Core Data

iOS、Core Data 和 iCloud - 切换上下文

Core Data iCloud 同步还是其他?

Ready iCloud + Core Data 解决方案

SQLite、iCloud,也许还有 Core Data——用于存储文件并与所有用户的设备共享它们?

处理 iCloud Core Data 错误