Могу ли я использовать dbaccess для существующей базы данных sqlite?
Мой вопрос, как я могу использовать dbaccess framework с существующей базой данных sqlite? У меня есть файл "test.sqlite" в папке "Мои документы" на моем устройстве. Я даже переименовал его в "test.db". Когда я пытаюсь зафиксировать объект моего класса Worker, ничего не происходит (я не получаю никаких ошибок с методом databaseError(error: DBError!)).
Вот как выглядит Worker.swift:
@objc(Worker)
class Worker: DBObject {
dynamic var lastName: NSString?
}
Вот так выглядит AppDelegate.swift:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
DBAccess.setDelegate(self)
DBAccess.openDatabaseNamed("test")
var w = Worker.new()
w.lastName = "WorkerName"
w.commit()
return true
}
1 ответ
Да, вы должны быть в состоянии, но будут некоторые предостережения. Поэтому у DBAccess всегда должен быть столбец ID, поэтому он создаст один из них в ваших существующих таблицах. Он также будет генерировать свои собственные значения PK для существующих записей.
Причина, по которой ваши элементы не сохраняются, может заключаться в том, что вам нужно будет вызвать функцию persistSynthesizedProperties, установив для делегата значение true.
Поскольку у вас есть только одно поле, я могу понять, почему это может ничего не делать. Потому что, когда мы меняем метод getter/setter в классе swift, он требует разных методов. Это те же методы, что и когда у класса objc есть синтезированные свойства, которые требуют сохранения.
Поэтому, когда сделан вызов commit, в списке нет сохраняемых столбцов, поэтому он выдает обновление без изменений, которое, естественно, оптимизируется как пустая операция.
Со временем мы хотели бы покончить с этим методом делегата, но в настоящее время мы не можем определить, на каком языке реализуется класс. Если мы сможем найти способ, то мы могли бы покончить с этой довольно раздражающей и странной причудой.
Спасибо Адриан