Вы можете получить доступ к своей БД с любого V C. Код (который вы, вероятно, будете использовать везде, где хотите получить доступ к своей БД) будет иметь вид
let path = NSSearchPathForDirectoriesInDomains(
.documentDirectory, .userDomainMask, true
).first!
do {
let db = try Connection("\(path)/<your.db.filename>")
let recordsTable = Table("records")
//or whatever you'd like to do, extract, modify, insert or delete
}
catch let error {
print("Data operation failed for records table: \(error)")
}
Вместо того, чтобы копировать один и тот же код по всему вашему проекту, вы можете отдельно создать свой собственный класс для любой из ваших БД. операций и получить к нему доступ из любого места:
class DatabaseOps {
//..
func getHighscoreTable() -> Array<HighScoreDataArray> {
let path = NSSearchPathForDirectoriesInDomains(
.documentDirectory, .userDomainMask, true
).first!
var highscores = [HighScoreDataArray]()
do {
let db = try Connection("\(path)/tasksolver.db")
let score = Expression<Int>("Score")
let username = Expression<String>("Username")
let recordsTable = Table("records").order(score.desc).limit(10)
for row in try db.prepare(recordsTable) {
let highscore = HighScoreDataArray(score: Int(row[score]), username: String(row[username]))
highscores += [highscore]
}
} catch let error {
print("Data operation failed for records table: \(error)")
}
return highscores
}
//..
}
class RecordsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var myDb : DatabaseOps = DatabaseOps()
//...
super.viewDidLoad()
//get the data from database by using myDB method
myHighScoreTable = myDb.getHighscoreTable()
Кроме того, прежде чем вы попробуете его в разных VC - не забудьте убедиться, что у вас есть файл DB на месте. Если это не так, позвольте db = try Connection создать для вас пустую базу данных, которая не будет содержать никаких ваших данных или таблиц, к которым вы хотите получить доступ.