我正在开发应用程序,其中我必须创建特定书籍和书籍的备份。必须稍后恢复。
有多个almirahs&每个almirah有多本书和每本书都有多个章节和等等。在核心数据中,我使用单个持久性存储来保存我的数据。实体必须是一对多和多对一很多种关系。
应用程序中的一个要求是将almirahs与服务器同步。用户可以更新almirah,book&问题等。
我想要的是在将数据同步到服务器之前我想要备份我需要与服务器同步的特定的almirah,包括所有关系等等。所以我可以在以后需要时恢复该almirah。
需要恢复,因为多个用户可以同步相同的almirah&因为在同步之后数据不会与同步之前的数据相同。
我读过这个SO链接,但没有通过太多。任何帮助,将不胜感激。 How can I duplicate, or copy a Core Data Managed Object?
我应该使用多个持久性存储吗?
答案 0 :(得分:0)
除了在整个数据存储区中保存检查点之外,您的需求在核心数据之外得到更好的处理,因此您不希望复制数据存储区中的项目,而是希望将整个数据存储区复制为单个数据存储区实体。
为此,您可以将数据存储区的每个“副本”存储在不同的文件夹中,这样您就可以拥有文件夹working
,v1
,v2
(您可以决定关于如何管理版本)。如果要复制,则会保存working
版本,然后使用NSFileManager
将working
文件夹中的所有文件复制到v3
。
请注意,您的数据存储区可能存储为多个文件,因此不要只是尝试自行复制.sqlite文件。
要恢复旧版本,您将从当前存储中销毁所有上下文和托管对象,然后复制要还原的版本,替换当前的working
文件夹。