复制/备份持久存储

时间:2014-03-26 18:43:15

标签: cocoa core-data nsfilemanager

通常当我备份我的应用程序的核心数据文件时,我只是在应用程序运行时将.sqlite文件复制到另一个位置。但是现在启用了日记(wal),这不再起作用了。我看不到NSPersistentStoreCordinator或NSManagedObjectContext编写新文件的方法。我猜也许我有两种方法:

    • 关闭持久存储并使用@ {@“journal_mode”:@“DELETE”}再次打开它,然后复制.sqlite文件。
  1. 添加另一个持久存储,并可能从原始ps复制到新的?
  2. 有更好的想法吗? 谢谢。

1 个答案:

答案 0 :(得分:7)

更改日志模式将消除日志文件,因此很简单。我不知道我相信它会供你使用 - 因为无法保证Core Data实际上已经刷新了对SQLite文件的所有新更改。它可能没问题,但可能有一些内存中的更改,Core Data还没有写出来。这几乎肯定是安全的,但偶尔也不会有效。

选项2会更安全,但更多工作。我使用NSPersistentStoreCoordinator的{​​{1}}方法创建了第二个持久性存储(文档特别提到它对“另存为”操作很有用)。告诉核心数据为您创建副本应确保实际复制所有必需的内容。只是不要在主持久性存储协调器上执行此操作,因为在迁移之后,PSC会删除对原始存储对象的引用(文件仍然存在,但该PSC不再使用它)。步骤将是

  1. 创建新的仅迁移migratePersistentStore:toURL:options:withType:error:并添加原始持久性存储文件。
  2. 使用此新PSC迁移到新文件URL。
  3. 删除对此新PSC的所有引用,不要将其用于其他任何内容。