4

我的问题是如何将 dbaccess 框架与现有的 sqlite 数据库一起使用?我设备的 Documents 文件夹中有“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
}
4

1 回答 1

1

是的,你应该能够,但会有一些警告。所以 DBAccess 总是必须有一个 ID 列,所以它会在你现有的表中创建一个。它还将为现有记录生成它自己的 PK 值。

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

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

因此,当调用 commit 时,没有列出要持久化的列,因此它发出没有更改的更新,这自然也被优化为空操作。

我们希望及时取消这个委托方法,但目前我们无法在 obj-c 中确定一个类是使用什么语言实现的。如果我们能找到一种方法,那么我们就可以消除这个相当烦人和奇怪的怪癖。

谢谢阿德里安

于 2015-08-17T19:30:47.057 回答