通常当我备份我的应用程序的核心数据文件时,我只是在应用程序运行时将.sqlite文件复制到另一个位置。但是现在启用了日记(wal),这不再起作用了。我看不到NSPersistentStoreCordinator或NSManagedObjectContext编写新文件的方法。我猜也许我有两种方法:
有更好的想法吗? 谢谢。
答案 0 :(得分:7)
更改日志模式将消除日志文件,因此很简单。我不知道我相信它会供你使用 - 因为无法保证Core Data实际上已经刷新了对SQLite文件的所有新更改。它可能没问题,但可能有一些内存中的更改,Core Data还没有写出来。这几乎肯定是安全的,但偶尔也不会有效。
选项2会更安全,但更多工作。我使用NSPersistentStoreCoordinator
的{{1}}方法创建了第二个持久性存储(文档特别提到它对“另存为”操作很有用)。告诉核心数据为您创建副本应确保实际复制所有必需的内容。只是不要在主持久性存储协调器上执行此操作,因为在迁移之后,PSC会删除对原始存储对象的引用(文件仍然存在,但该PSC不再使用它)。步骤将是
migratePersistentStore:toURL:options:withType:error:
并添加原始持久性存储文件。