在iOS上备份sqlite DB

时间:2013-06-13 20:19:21

标签: ios sqlite core-data backup

我希望在我的应用运行时制作应用主sqlite数据库的备份副本。

1)我已经读过,如果数据库已被检查点复制sqlite文件是安全的(此时wal文件不包含重要数据)。 [managedContext save:]是否进行了检查点,或者我还需要做些什么? (参考-shm and -wal files in SQLite DB

2)有没有办法,没有拆除整个核心数据堆栈,以确保核心数据在我复制时不会尝试写入sqlite文件?我的应用程序在任何用户输入后都经常保存,如果有某种方法强制阻止一秒钟,那就太好了。

2 个答案:

答案 0 :(得分:1)

我上传了一个示例应用程序,该应用程序以多种不同方式提供备份和还原功能,包括本地备份,iCloud复制备份,电子邮件备份,从电子邮件导入以及通过iTunes进行文件复制。有关演示这些功能的视频,请参阅以下链接,您可以从该网站下载示例应用程序。

http://ossh.com.au/design-and-technology/software-development/sample-library-style-ios-core-data-app-with-icloud-integration/sample-apps-explanations/backup-files/

修改

使用相同的fileURL创建一个新的persistentStoreCoordinator应该是安全的,然后在不关闭App的情况下使用migratePersistentStore API,但首先保存主MOC。我总是使用JOURNAL = DELETE模式来确保我只需要使用单个文件来处理。如果您使用的是WAL模式,那么您需要备份sqlite使用的所有三个文件。

答案 1 :(得分:0)

关于2) 当我进行备份时,我会关闭所有妈妈,妈妈和持久性商店。然后进行备份或恢复是安全的。此外,所有视图都在等待事件释放所有coredata资源,并在数据库再次可用时将其恢复。拥有一个管理coredata的单身人士是件好事。