2016-11-20 63 views
0

以前,我只有一个对象具有我需要的每个值。我“重新组合”了它们并制作了单独的物体。我将新对象的类型添加到原始对象中。 如何将旧属性值分配给对象的属性?如何使用Realm Swift将旧属性迁移到新对象中

下面是我的对象代码:

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

假设您在模式迁移过程中正在执行此操作,您需要使用migration.create来创建新对象,而不是它们的init。然后你可以将它们设置在新对象上,如下所示:

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

是的,我正在进行模式迁移。我尝试了你的答案,但是我得到这个错误:'类型'MigrationObject'的值(又名'DynamicObject')没有成员'id''对象有一个id字段,所以它不应该显示错误。 – Dan

+0

这实际上应该是'other [“id”]'和'other [“str”]'。您得到错误消息@Daniel的原因是,迁移块中的Realm对象不是您的类型化模型(在处理来自旧模式版本的对象时,显然不适用,而这些对象的类型化模型已不在其周围)。 – jpsim

+0

我已经更新了答案以反映这一点。现在应该是正确的。 – jpsim