我正在使用 Core Data 开发一个 iOS 应用程序。我想让持久存储位于共享位置,例如网络驱动器,以便多个用户可以处理数据(在不同的时间,即并发不是问题的一部分)。
但我也想提供“离线”处理数据的能力,即通过在 iPad 上保留一个本地持久存储。到目前为止,我读到我可以通过使用持久存储协调器的迁移功能在某种程度上做到这一点,但这似乎意味着旧存储随后失效。此外,我不一定要移动整个商店“离线”,而只是移动其中的一部分:使用 Apple 提供的简单“公司部门”示例,我希望用户能够检查一个部门,同时与该部门关联的所有员工(以及与每个员工关联的所有属性)。然后,用户可以在他们的 iPad 上本地处理部门数据,一段时间后,将这些更改同步回服务器的持久存储。
因此,我需要将核心数据对象从一个存储复制到另一个存储,以及通过关系引用的所有对象。并且这个复制过程还需要确保如果目标持久存储中已经存在一个对象,它会被覆盖而不是添加到存储中的新对象(我已经为每个对象提供了一个 UID 出于另一个原因,所以我可能能够重新使用 UID)。
到目前为止,我所看到的似乎没有简单的方法来同步或复制 Core Data 持久存储,这是一个公平的评估吗?
那么我真的需要编写一段代码来执行以下操作:
- 通过 MOC 检索对象“A”
- 在所有实体中检索与对象“A”有关系的所有对象
- 为目标持久存储实例化一个新的 MOC
- 对于检索到的每个对象,检查目标存储是否存在该对象
- 如果对象存在,则使用在步骤 1 和 2 中检索到的对象的属性覆盖它
- 如果对象不存在,则创建它并根据在步骤 1 和 2 中检索到的对象设置所有属性
虽然这不是世界上最复杂的事情,但我仍然认为“在线/离线编辑”的这种要求足够普遍,以至于某些标准功能可用于同步部分持久性存储?
非常感谢您的观点,谢谢,da_h-man