如何使用Realm Swift将旧属性迁移到新对象

时间:2016-11-20 11:39:39

标签: ios swift migration realm realm-migration

以前,我只有一个对象具有我需要的所有价值。我“重新组合”他们并制作了单独的物品。我将具有新对象类型的属性添加到原始对象。 如何将旧属性值分配给对象的属性?

这是我的对象的代码:

class MainObject: Object {
    dynamic var id: Int = 0
    // Schema 0
    dynamic var otherId: Int = 0
    dynamic var otherStr: String = ""

    dynamic var anotherId: Int = 0
    dynamic var anotherD: Double = 0.0
    dynamic var anotherText: String = ""

    // Schema 1
    dynamic var otherObjectVar: OtherObject?
    dynamic var anotherObjectVar: AnotherObject?
}

// Schema 1
class OtherObject: Object {
    dynamic var id: Int = 0
    dynamic var str: String = 0
}
class AnotherObject: Object {
    dynamic var id: Int = 0
    dynamic var d: Double = 0.0
    dynamic var text: String = ""
}

(更改变量名称)

我尝试使用convenience init(){},但它没有用。我还尝试将对象实例分配给newObject,但这也不起作用。 这是用于更容易理解的代码:

let other = OtherObject()
other.id = 0
other.str = oldObject["otherStr"] as! string
newObject["otherObjectVar"] = other

如何将旧属性迁移到另一个对象的新属性?

编辑:暂时,我用

解决了它
let obj = migration.create(MainObject.className())
migration.delete(obj)

但我不认为这是正确的解决方案。所以,如果有人有解决方案,我会很感激。

1 个答案:

答案 0 :(得分:1)

假设您在架构迁移期间执行此操作,则需要使用migration.create来创建新对象,而不是它们的init。然后你可以在新对象上设置它们:

let other = migration.create(OtherObject.className())
other["id"] = 0
other["str"] = oldObject["otherStr"] as! String
newObject?["otherObjectVar"] = other