我希望在我的应用运行时制作应用主sqlite数据库的备份副本。
1)我已经读过,如果数据库已被检查点复制sqlite文件是安全的(此时wal文件不包含重要数据)。 [managedContext save:]是否进行了检查点,或者我还需要做些什么? (参考-shm and -wal files in SQLite DB)
2)有没有办法,没有拆除整个核心数据堆栈,以确保核心数据在我复制时不会尝试写入sqlite文件?我的应用程序在任何用户输入后都经常保存,如果有某种方法强制阻止一秒钟,那就太好了。
答案 0 :(得分:1)
我上传了一个示例应用程序,该应用程序以多种不同方式提供备份和还原功能,包括本地备份,iCloud复制备份,电子邮件备份,从电子邮件导入以及通过iTunes进行文件复制。有关演示这些功能的视频,请参阅以下链接,您可以从该网站下载示例应用程序。
修改
使用相同的fileURL创建一个新的persistentStoreCoordinator应该是安全的,然后在不关闭App的情况下使用migratePersistentStore
API,但首先保存主MOC。我总是使用JOURNAL = DELETE模式来确保我只需要使用单个文件来处理。如果您使用的是WAL模式,那么您需要备份sqlite使用的所有三个文件。
答案 1 :(得分:0)
关于2) 当我进行备份时,我会关闭所有妈妈,妈妈和持久性商店。然后进行备份或恢复是安全的。此外,所有视图都在等待事件释放所有coredata资源,并在数据库再次可用时将其恢复。拥有一个管理coredata的单身人士是件好事。