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

How can I force update in a CoreData SQLite database?

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

一切正常,但我想测试其他东西,所以我在我的应用程序中修改了一些数据,但我无法访问修改后的数据。 .sqlite 数据库总是有几天的历史。我在 iTunes 共享中还有另外两个文件(.sqlite-shm 和 .sqlite-wal),它们被修改(当我修改数据时日期会改变),但我不能 'update' .sqlite 文件。

我尝试在 iPhone 上强制退出应用程序,重建应用程序,创建新数据而不是修改,但没有成功。

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

其他文件存在是因为存储使用 SQLite 日志类型。您只需在初始化 sqlite3 工具时使用该类型即可。

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

根据Technical Q&A1809,强制SQLite将-wal文件合并到主.SQLite文件中的方法是使用"rollback journaling mode"将存储添加到持久存储协调器:

For a store that was loaded with the WAL mode, if both the main store file and the corresponding -wal file exist, using rollback journaling mode to add the store to a persistent store coordinator will force Core Data to perform a checkpoint operation, which merges the data in the -wal file to the store file. This is actually the Core Data way to perform a checkpoint operation.

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