如何将 .SQLite 正确添加到 App 的包中?
Posted
技术标签:
【中文标题】如何将 .SQLite 正确添加到 App 的包中?【英文标题】:How to add .SQLite to App's bundle properly? 【发布时间】:2017-03-21 05:38:51 【问题描述】:本教程告诉我,我需要将 3 个文件(在 WAL 模式下)扔到包中。
https://www.appcoda.com/core-data-preload-sqlite-database/
我的应用程序使用 DELETE WAL 模式,那里只存在 1 个文件(仅限 .sqlite)。
我只是测试并将 1 个文件 (.sqlite) 扔到包中。 然后编写方法将其复制到 App 的 Document 目录。 它工作:o,文件完美复制。
但我仍然想知道 1 文件模式以后会不会让我的应用崩溃?? 我应该改用“3个文件”模式(WAL MODE)吗???
更新***
您好,非常感谢,我刚刚将 .sqlite 文件完美地复制到了 NSBundle。但是在我将文件从 Bundle 复制到 Document 目录之后。我的 PSC 无法读取 .sqlite(认为 ps 添加到 psc 完美,由 [psc persistentStores] 检查。获取的数据仍然是空的(认为我可以从 DBBrowser 看到数据存在于 .sqlite 中)。我一遍又一遍地尝试过,但是仍然没有工作(更改文件名/等)。
我的 PSC 选项是这样的。请问是这个原因吗???谢谢
@ NSSQLitePragmasOption : @@"journal_mode":@"DELETE",
NSInferMappingModelAutomaticallyOption: @YES,
NSMigratePersistentStoresAutomaticallyOption : @YES ;
【问题讨论】:
正如我在对your previous question 的回答中解释的那样,您不需要创建和复制这些额外的文件。 【参考方案1】:我假设你的意思是
删除 WAL 模式
您的数据库是否处于 DELETE 日志模式。
正如 SQLite 文档所述:
DELETE 日志模式是正常行为。在 DELETE 模式下,回滚日志在每个事务结束时被删除。实际上,删除操作是导致事务提交的操作。
关于共享内存文件,它说它只被使用
在 WAL 模式下运行时 [...]
因此,如果与数据库的最后一个连接正确关闭,您应该没问题。 如果您仍然担心,您还可以通过运行验证数据库的完整性
PRAGMA integrity_check
或
PRAGMA quick_check
就可以了。
【讨论】:
您好,非常感谢,我刚刚将 .sqlite 文件完美地复制到了 NSBundle。以上是关于如何将 .SQLite 正确添加到 App 的包中?的主要内容,如果未能解决你的问题,请参考以下文章