我的问题是如何在现有的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
}
答案 0 :(得分:1)
是的,你应该可以,但会有一些警告。因此,DBAccess必须始终具有ID列,因此它将在现有表中创建其中一个。它也会为现有记录生成自己的PK值。
您的项目不持久的原因可能在于您需要调用persistSynthesizedProperties,在委托上将其设置为true。
由于你只有一个字段,我可以理解为什么这似乎什么都不做。因为当我们在swift类中交换getter / setter方法时,它需要不同的方法。这些方法与objc类合成需要持久化的属性时的方法相同。
因此,当调用commit时,没有列出要保留的列,因此它会发出一个没有更改的更新,这自然也会优化为null操作。
我们及时想要废除这种委托方法,但目前我们无法在obj-c中使用什么语言来实现。如果我们能找到一种方法,那么我们就可以摆脱这种相当恼人和奇怪的怪癖。
由于 阿德里安