在领域之间复制对象时需要迁移

Migration required when copying objects between Realms

我正在尝试在两个 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 数据库文件时,迁移工作完美。但是,如果我不替换文件而是尝试在它们之间复制对象,我会得到 "migration is required for object" 等

我尝试在每个配置中明确说明路径、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)
            }
        }