在基于文档的 SwiftUI 应用程序中,我想使用 GRDB 作为 Sqlite 包装器将每个文档保存到单独的 Sqlite 文件中。在实现协议的文档中加载 Sqlite 文件很简单,方法是为要加载的文件FileDocument
创建一个DatabaseQueue
并使用其.backup(to:)
方法复制到内存中DatabaseQueue
。我应该如何在方法中实现保存func fileWrapper(configuration: WriteConfiguration)
?似乎没有明显的方法可以使用相同的.backup(to:)
方法。
我发现了 Andre Yonadam 的一个示例应用程序,它在 NSDocument 的子类中以相同的方式处理这个问题:
override func write(to url: URL, ofType typeName: String, for saveOperation: NSDocument.SaveOperationType, originalContentsURL absoluteOriginalContentsURL: URL?) throws {
let destination = try DatabaseQueue(path: url.path)
do {
try memoryDBQueue.backup(to: destination)
} catch {
throw NSError(domain: NSOSStatusErrorDomain, code: unimpErr, userInfo: nil)
}
}
override func read(from url: URL, ofType typeName: String) throws {
let source = try DatabaseQueue(path: url.path)
do {
try source.backup(to: memoryDBQueue)
} catch {
throw NSError(domain: NSOSStatusErrorDomain, code: unimpErr, userInfo: nil)
}
}