4

我有一个现有的 Realm 项目,有两个模型

Model1 -> id, updateDate, details
Model2 -> id, updateDate, title, model1

(是的,我使用了一个类对象而不是 id - aargh。两个 id 都是主键)

使用我的应用程序的更新版本,我将一个新属性添加到Model1( title) 并Model2.model1从类型更改Model1为类型string(= Model1.id)

我根据提供的示例为此编写了一个迁移块

let migrationBlock: (RLMMigration, UInt64) -> Void = { (migration, oldSchemeVersion) in
    if oldSchemeVersion < 1 {
        migration.enumerateObjects(Model1.className()) { oldObject, newObject in
            //Nothing needed, the title can be a blank
        }
        migration.enumerateObjects(Model2.className()) { oldObject, newObject in
            if let oldModel1 = oldObject!["model1"] as? RLMDynamicObject {
                newObject!["model1"] = oldModel1["id"]
            }
        }
    }
}

let config = RLMRealmConfiguration.defaultConfiguration()
config.schemaVersion = newSchemaVersion
config.migrationBlock = migrationBlock
RLMRealmConfiguration.setDefaultConfiguration(config)

但是在迁移结束时,当我尝试访问默认领域 ( Realm.defaultRealm) 时,它会失败并出现此错误

Terminating app due to uncaught exception 'RLMException', reason: 'Primary key property 'id' has duplicate values after migration.'

我无法弄清楚为什么会出错以及我应该做些什么来完成这项工作。任何帮助,将不胜感激。

注意 - 我的代码使用 Realm 目标 c 代码,但在 Swift 应用程序中

4

0 回答 0