1

我想在我的应用程序运行时制作我的应用程序主 sqlite DB 的备份副本。

1)我已经读过,如果数据库已被检查点(此时 wal 文件不包含重要数据),则只需复制 sqlite 文件是安全的。[managedContext save:] 是否执行该检查点,或者我还有其他事情要做吗?(参考SQLite DB 中的 -shm 和 -wal 文件

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

4

2 回答 2

1

我已经上传了一个示例应用程序,它提供了多种不同的备份和恢复功能,包括本地备份、将备份复制到 iCloud 和从 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 应该是安全的,然后migratePersistentStore在不关闭应用程序的情况下使用 API,但首先保存主 MOC。我总是使用 JOURNAL=DELETE 模式来确保我只需要使用单个文件来处理。如果您使用 WAL 模式,则需要备份 sqlite 使用的所有三个文件。

于 2014-03-04T02:32:25.793 回答
0

关于 2)当我做备份时,我关闭了所有的 mom、moc 和持久存储。然后可以安全地进行备份或恢复。此外,所有视图都在等待事件释放所有 coredata 资源,并在数据库再次可用时将它们带回来。有一个单例来管理核心数据是很好的。

于 2013-06-14T08:19:54.317 回答