我正在尝试在两个 Realm 数据库之间复制对象。第一个数据库的模式是版本 0,第二个是版本 1。
let backupConfig = Realm.Configuration(
path: "\(tmp)/ReadingLog.realm", // This Realm is version 0
readOnly: true
)
let backupRealm = try! Realm(configuration: backupConfig)
let defaultRealm = try! Realm() // My default Realm is version 1
let books = backupRealm.objects(Book)
try! defaultRealm.write {
for book in books {
defaultRealm.create(Book.self, value: book, update: true)
}
}
当我用旧的替换我当前的 Realm 数据库文件时,迁移工作完美。但是,如果我尝试在它们之间复制对象而不是替换文件,我会得到“对象需要迁移”等信息。
我尝试在每个配置中明确说明路径、schemaVersions 和 migrationBlocks,但这并不重要。
我做错了什么?
提前致谢
丹尼尔
最佳答案
好的,经过一段时间的迁移示例后,我设法解决了这个问题。
我不得不将我的新 schemaVersion (1) 添加到旧 Realm 数据库的配置中,这对我来说似乎有点违反直觉:
let backupConfig = Realm.Configuration(
path: "\(tmp)/ReadingLog.realm", // This file is version 0
readOnly: true,
schemaVersion: 1 // But I have to set this to version 1
)
我以为 schemaVersion
应该是这个数据库的版本,所以 Realm 会知道 从 迁移哪个版本,但实际上它似乎是新 我希望它迁移到 的版本。
然后我必须在那之后立即调用 migrateRealm(backupConfig)
。然后成功了!
下面是工作代码:
let backupConfig = Realm.Configuration(
path: "\(tmp)/ReadingLog.realm",
readOnly: true,
schemaVersion: 1
)
migrateRealm(backupConfig)
let backupRealm = try! Realm(configuration: backupConfig)
let defaultRealm = try! Realm()
let books = backupRealm.objects(Book)
try! defaultRealm.write {
for book in books {
defaultRealm.create(Book.self, value: book, update: true)
}
}
关于ios - 在 Realm 之间复制对象时需要迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33449454/