如何解决 Sqlite.swift 中的警告消息“libsqlite3.dylib 客户端中的错误:数据库完整性因 API 违规而受到损害”?

doo*_*ori 9 integrity ios swift sqlite.swift

我正在使用 Sqlite.swift

当我在模拟器中重新启动应用程序时,我想删除现有数据库并创建新数据库。(由于初始化数据库......我对数据库列进行了很多更改。)

但有警告信息。

[logging] BUG IN CLIENT OF libsqlite3.dylib: database integrity compromised by API violation: vnode unlinked while in use:
Run Code Online (Sandbox Code Playgroud)

我知道这是关于诚信的...但我不知道如何解决这个问题。

这是我的代码。当您单击“创建”按钮时, func createDB() 将起作用。

[logging] BUG IN CLIENT OF libsqlite3.dylib: database integrity compromised by API violation: vnode unlinked while in use:
Run Code Online (Sandbox Code Playgroud)

这是日志。

CREATE DB
remove db file because you already have db
Successfully create database
CREATE DB
remove db file because you already have db
2020-04-13 23:01:36.866156+0900 RealmTest[40604:6719249] [logging] BUG IN CLIENT OF libsqlite3.dylib: database integrity compromised by API violation: vnode unlinked while in use: {directory-address-in-my-local-computer}
2020-04-13 23:01:36.866272+0900 RealmTest[40604:6719249] [logging] invalidated open fd: 5 (0x11)
Successfully create database
Run Code Online (Sandbox Code Playgroud)

我发现这不是错误,而是警告。当我重新启动应用程序时,删除操作工作得很好,没有警告消息。但是当我第二次单击“创建”按钮时,会出现警告消息。

当我关闭应用程序时,我没有删除数据库。因此,我认为很明显,当应用程序再次打开时,数据库将被删除。所以我不知道创建数据库两次有什么问题。如果您能告诉我,我将非常感激!请告诉我。

Ger*_*eon 6

您需要确保在调用createDB()方法之前,所有与数据库的挂起连接都已关闭。您的代码中至少有一个这样的连接,因此self.database您需要将其设置为零。

self.database = nil
self.createDB()
Run Code Online (Sandbox Code Playgroud)

(或者,您可以在里面createDB()