2017-03-06 104 views
1

我無法更改具有指向其他領域對象的屬性的領域對象的類名稱。例如,像這樣的課程。領域遷移 - 更改類的名稱(對於複雜類)

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

如何正確執行此類遷移?

回答