我正在尝试在两个Realm数据库之间复制对象。第一个数据库的模式是版本0,第二个是版本1.
10-31 13:18:05.124: D/SocialAuthError(21880): org.brickred.socialauth.exception.SocialAuthException: org.brickred.socialauth.exception.SocialAuthException: Status not updated. Return Status code :403
10-31 13:18:05.124: W/System.err(21880): org.brickred.socialauth.android.SocialAuthError: Message Not Posted
10-31 13:18:05.124: W/System.err(21880): at org.brickred.socialauth.android.SocialAuthAdapter$6.run(SocialAuthAdapter.java:868)
10-31 13:18:05.124: W/System.err(21880): at java.lang.Thread.run(Thread.java:818)
当我用旧版本替换当前的Realm数据库文件时,迁移工作完美。但是如果不是替换文件而是尝试在它们之间复制对象,我会得到“对象需要迁移”等等。
我尝试在每个配置中明确说明路径,schemaVersions和migrationBlocks,但这没关系。
我做错了什么?
提前致谢,
丹尼尔
答案 0 :(得分:2)
好的,经过一段时间的迁移示例后,我设法将其整理出来。
我不得不将新的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会知道来自要迁移的版本,但实际上它似乎是 new 版本I希望它将迁移到。
然后我必须在此之后立即致电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)
}
}