Могу ли я использовать 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, в списке нет сохраняемых столбцов, поэтому он выдает обновление без изменений, которое, естественно, оптимизируется как пустая операция.

Со временем мы хотели бы покончить с этим методом делегата, но в настоящее время мы не можем определить, на каком языке реализуется класс. Если мы сможем найти способ, то мы могли бы покончить с этой довольно раздражающей и странной причудой.

Спасибо Адриан

Другие вопросы по тегам