我有一个现有的 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 应用程序中