【发布时间】:2021-02-19 17:35:50
【问题描述】:
我正在尝试在我的 SwiftUI 代码中打开一个 SQLite3 数据库,以访问包中的文件路径,我正在使用以下函数;
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
.first!
但是我不断收到错误unable to open database file (code: 14),但在尝试运行几次后,我意识到每次运行代码时path 中的倒数第二个文件夹都不同。如何找到不会更改的捆绑包路径以便代码正常工作?
这些是路径如何变化的一些示例:
倒数第二个文件夹命名为:CAC91DB3-E264-436F-89A8-1E3D76C4DC56
/Library/Developer/CoreSimulator/Devices/EFD14A1B-7207-4840-9ACE-8E44A269CC70/data/Containers/Data/Application/CAC91DB3-E264-436F-89A8-1E3D76C4DC56/Documents
倒数第二个文件夹命名为:0A23051F-9362-4B4D-B49B-BE0F028384DC
/Library/Developer/CoreSimulator/Devices/EFD14A1B-7207-4840-9ACE-8E44A269CC70/data/Containers/Data/Application/0A23051F-9362-4B4D-B49B-BE0F028384DC/Documents
编辑:这是我正在使用的代码:
Import swiftUI
Import Foundation
Import SQLite
func openDatabase() {
let ProductID = Expression<Int64>("ProductID")
let Name = Expression<String>("Name")
let Calories = Expression<Double>("Calories")
let Protein = Expression<Double>("Protein")
let Carbs = Expression<Double>("Carbs")
let Fats = Expression<Double>("Fats")
let Weight = Expression<Double>("Weight")
let Category = Expression<String>("Category")
let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let fileURL = documentDirectory.appendingPathComponent("Database.db")
let db = try! Connection("\(fileURL)")
let Products = Table("Products")
//Thread 1: Fatal error: 'try!' expression unexpectedly raised an error: no such table: Products (code: 1)
for prID in try! db.prepare(Products) {
print("productid: \(prID[ProductID]), name: \(prID[Name]), calories: \(prID[Calories]), protein: \(prID[Protein]), carbs: \(prID[Carbs]), fats: \(prID[Fats]), weight: \(prID[Weight]), category: \(prID[Category])")
DatabaseTest().dataTest.append(Product(name: prID[Name], calories: prID[Calories], protein: prID[Protein], carbs: prID[Carbs], fats: prID[Fats], weight: prID[Weight]))
}
}
关于sqlite.swift的澄清参考:
(https://github.com/stephencelis/SQLite.swift/blob/master/Documentation/Index.md)
【问题讨论】:
-
您的数据库文件在哪里? Bundle 和 container 是不同的地方。
-
@Asperi 我已将数据库文件集成到项目中,使其在我的计算机中的位置为
/Users/diego/Desktop/Bites/Bites/Database
标签: ios swift sqlite swiftui sqlite.swift