领域迁移 - 更改类的名称(用于复杂类)

时间:2017-03-06 20:39:24

标签: swift realm

我无法更改具有指向其他Realm对象的属性的Realm对象的类名。例如,这样的一个类。

class OldClass: Object {
    var id: String!
    var dog: Dog!  //this is a Realm Object (with its own table)
}

我已经看到了如何做到这一点的简单例子。

migration.enumerateObjects(ofType: "OldClass", { (oldObject, newObject) in
    migration.create("NewClass", value: oldObject!)
})

如果OldClass和NewClass的模式相同,并且所有属性都是非Realm对象,我希望上述方法能够正常工作。如果模式不同,我认为你可以做这样的事情。

migration.enumerateObjects(ofType: "OldClass", { (oldObject, newObject) in
    let obj = migration.create("NewClass")
    obj["id"] = (oldObject["id"] as! String)
    obj["newPropertyName"] = (oldObject!["oldPropertyName"] as! Int)
})

当您的对象具有指向另一个Realm对象的属性时,这些示例似乎都不起作用。至少这是我怀疑的,因为我得到RLMException'无法创建具有现有主键值的对象'。

我怀疑'现有主键'是指Dog对象,而在从NewClass迁移到OldClass时,迁移正试图重新创建Dog对象(已经存在)。

如何正确执行此类迁移?

1 个答案:

答案 0 :(得分:0)

很遗憾,此功能尚未实施,我们会在https://github.com/realm/realm-cocoa/issues/2162中对其进行跟踪。您还可以在https://github.com/realm/realm-cocoa/issues/4366找到一些有用的信息。