在使用新的SQLite浏览器对sqlite文件进行更改之前,我的应用程序运行良好。然后突然有一个打开数据库的问题。 数据库打开功能如下:
func openDatabase() -> Bool {
do {
let manager = FileManager.default
let documentsURL = try manager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("database.sqlite")
var rc = sqlite3_open_v2(documentsURL.path, &db, SQLITE_OPEN_READWRITE, nil)
if rc == SQLITE_CANTOPEN {
let bundleURL = Bundle.main.url(forResource: "database", withExtension: "sqlite")!
try manager.copyItem(at: bundleURL, to: documentsURL)
rc = sqlite3_open_v2(documentsURL.path, &db, SQLITE_OPEN_READWRITE, nil)
}
if rc != SQLITE_OK {
print("Error: \(rc)")
return false
}
return true
} catch {
print(error)
return false
}
}
使用 sqlite的数据库浏览器在数据库中进行更改后,应用程序在打开数据库之后立即崩溃,并指出该行在展开可选值时给出了意外的nil:
let bundleURL = Bundle.main.url(forResource: "database", withExtension: "sqlite")!
日志给出以下文本:
2018-12-20 18:16:22.306631+0100 eFloraSnap[7844:165367] [logging-persist] cannot open file at line 42249 of [95fbac39ba]
2018-12-20 18:16:22.306810+0100 eFloraSnap[7844:165367] [logging-persist] os_unix.c:42249: (0) open(/Users/tomsol/Library/Developer/CoreSimulator/Devices/143DCE6E-01F0-40D0-9640-6397504D81FA/data/Containers/Data/Application/6BB619CB-BEF9-4917-9A74-8C92D84DA2F0/Documents/database.sqlite) - Undefined error: 0
(lldb)
我不明白。我用“ Clean My Mac”完全卸载了Xcode,然后从头开始重新安装了Xcode,希望删除一些错误的设置。这没有解决任何问题。认为某些数据库格式可能存在问题。
还有其他原因吗?
编辑: 我现在看到,databse.sqlite不在日志中给定的路径中。那么为什么在构建和运行时sqlite文件没有复制到那里?设备与模拟器存在相同的问题。
答案 0 :(得分:0)
好吧,似乎完全卸载Xcode不能解决错误的设置。 在Buildphases-Copy捆绑软件资源中添加sqlite文件可以修复该文件。为什么它在第一时间就从副本捆绑软件资源中消失,原因尚不清楚。为什么还没有使用新安装的xcode自动添加它的原因。