如何在CoreData SQLite数据库中强制更新?

时间:2016-05-19 21:12:43

标签: ios sqlite core-data updates itunes

我有一个应用程序,我使用CoreData来存储数据。 一切都运行正常,但我想轻松访问我的数据,以进行验证。 所以我有想法尝试与iTunes共享数据(UIFileSharingEnabled)。 现在我可以在iTunes中看到我的数据库,我可以在我的mac上复制.sqlite文件,我可以使用sqlite3验证数据。

一切都很好,但我想测试其他东西,所以我在我的应用程序中修改了一些数据,而且我无法访问修改后的数据。 .sqlite数据库总是有几天了。我在iTunes共享中有两个其他文件(.sqlite-shm和.sqlite-wal),这些文件被修改(修改数据时日期会发生变化),但我无法'更新'.sqlite文件。

我尝试强行退出iPhone上的应用程序,重建应用程序,创建新数据而不是修改,没有运气。

我的应用程序中的数据是正确的,所以我假设修改存储在另外两个文件中,但有人知道我可以尝试强制更新.sqlite文件吗?

2 个答案:

答案 0 :(得分:1)

存在其他文件,因为商店使用SQLite日志类型。在初始化sqlite3工具时,您只需要使用该类型。

理想情况下,您只使用应用程序代码来查询数据存储而不是使用sqlite3,因为表结构应该被视为私有。

答案 1 :(得分:1)

根据Technical Q&A1809,强制SQLite将-wal文件合并到主.SQLite文件的方法是使用"回滚日志记录模式"将商店添加到持久性商店协调员:

  

对于加载了WAL模式的商店,如果主存储文件和相应的-wal文件都存在,则使用回滚日记模式将存储添加到持久存储协调器将强制Core Data执行检查点操作,它将-wal文件中的数据合并到商店文件中。这实际上是执行检查点操作的核心数据方式。

技术说明包括实现此目的的示例代码(尽管是目标C)。