我正在创建一个应用程序,我想为其预填充部分数据库。我不想读取大量 SwiftData 对象或从 JSON 文件创建一堆对象并在第一次应用程序加载时将其加载到数据库中,因为这会花费大量时间并且无法提供出色的用户体验。
我遇到了一些解决方案,其中这个似乎可以满足我的要求: https://www.hackingwithswift.com/quick-start/swiftdata/how-to-pre-populate-an-app-with-an-existing-swiftdata-database
它描述了一种创建应用程序的方法,您可以在核心数据中复制数据库结构,以便创建与您的应用程序匹配并允许预填充的数据库文件。
然而,这似乎是一个可笑的麻烦。我的数据库结构非常复杂并且有很多连接的对象。我不想在核心数据文件中重新创建所有这些,更不用说围绕它创建整个项目只是为了能够创建数据存储。
SwiftData 真的没有更好的替代方案吗?似乎缺少这样的标准功能,或者我这里只是有一个边缘情况?
基于我的评论和https://stackoverflow.com/a/75380534/719690:
使用现有代码创建数据存储(使用 iOS 模拟器或使用您自己的内部 Mac 实用程序。
退出用于构建数据存储的程序。
找到您刚刚创建的
.sqlite
文件。打开它:sqlite <filename>
。
在 SQLite 中:
PRAGMA journal_mode = off;
VACUUM;
PRAGMA journal_mode = on;
control-D to exit
这应该会给你一个没有 WAL 或 SHM 的
.sqlite
文件。