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

问题描述:

我无法更改具有指向其他领域对象的属性的领域对象的类名称。例如,像这样的课程。领域迁移 - 更改类的名称(对于复杂类)

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的模式是一样的上面会工作,如果所有的性质是非境界对象。如果模式不同,我认为你可以做这样的事情。

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对象(已存在)。

如何正确执行此类迁移?

不幸的是,这个功能没有实现,我们在https://github.com/realm/realm-cocoa/issues/2162跟踪它。您还可以在https://github.com/realm/realm-cocoa/issues/4366找到一些有用的信息。