我可以将dbaccess用于现有的sqlite数据库吗?

时间:2015-08-17 18:56:20

标签: ios swift dbaccess

我的问题是如何在现有的sqlite数据库中使用dbaccess框架? 我有" test.sqlite"在我的设备的文档文件夹中的文件。我甚至将它重命名为" test.db"。当我尝试提交我的类的对象时,工作没有任何反应(我没有遇到任何与databaseError(错误: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 个答案:

答案 0 :(得分:1)

是的,你应该可以,但会有一些警告。因此,DBAccess必须始终具有ID列,因此它将在现有表中创建其中一个。它也会为现有记录生成自己的PK值。

您的项目不持久的原因可能在于您需要调用persistSynthesizedProperties,在委托上将其设置为true。

由于你只有一个字段,我可以理解为什么这似乎什么都不做。因为当我们在swift类中交换getter / setter方法时,它需要不同的方法。这些方法与objc类合成需要持久化的属性时的方法相同。

因此,当调用commit时,没有列出要保留的列,因此它会发出一个没有更改的更新,这自然也会优化为null操作。

我们及时想要废除这种委托方法,但目前我们无法在obj-c中使用什么语言来实现。如果我们能找到一种方法,那么我们就可以摆脱这种相当恼人和奇怪的怪癖。

由于 阿德里安