具有核心数据的多个持久性存储
Posted
技术标签:
【中文标题】具有核心数据的多个持久性存储【英文标题】:multiple persistence stores with core data 【发布时间】:2016-03-21 11:37:00 【问题描述】:我正在开发应用程序,我必须在其中创建特定书柜的备份并必须稍后恢复。
有多个衣橱,每个衣橱都有多本书,每本书都有多个章节等等。在核心数据中,我使用单个持久性存储来保存我的数据。实体具有一对一、对多和多对多类型的关系。
应用程序中的一个要求是将衣橱与服务器同步。用户可以更新衣橱、书籍和问题等。
我想要的是在将数据同步到服务器之前,我想备份一个特定的衣橱,我需要与服务器同步,包括所有关系等。这样我可以稍后在需要时恢复该衣橱。
需要恢复,因为多个用户可以同步同一个衣橱,因为同步后的数据与同步前的数据不同。
我阅读了这个 SO 链接,但没有通过太多。任何帮助,将不胜感激。 How can I duplicate, or copy a Core Data Managed Object?
我应该使用多个持久性存储吗?
【问题讨论】:
【参考方案1】:您的要求最好在核心数据之外处理,就像您在整个数据存储中保存一个检查点一样,因此您不想复制数据存储中的项目,而是希望将整个数据存储复制为单个实体。
为此,您可以将数据存储的每个“副本”存储在不同的文件夹中,例如文件夹 working
、v1
、v2
(您可以决定如何管理版本)。当您要复制时,您将保存working
版本,然后使用NSFileManager
将working
文件夹中的所有文件复制到v3
。
注意,您的数据存储区可能存储为多个文件,因此不要简单地尝试自行复制 .sqlite 文件。
要恢复旧版本,您将销毁当前存储中的所有上下文和托管对象,然后复制要恢复的版本,替换当前的 working
文件夹。
【讨论】:
不应该有一个简单的方法来处理这个。我的意思是我不能只从实体中备份一条记录并稍后恢复吗?就像在 Sql 中一样,我们可以使用 sql 查询来备份单个记录,然后我们可以根据备份的数据进行更新? 如果需要,您可以使用自己的方案复制单个托管对象的所有详细信息 - 核心数据并非专门针对这一点设计以上是关于具有核心数据的多个持久性存储的主要内容,如果未能解决你的问题,请参考以下文章