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)
解决了这个问题,但我不认为这是正确的解决方案。所以如果有人有这个解决方案,我会很感激。
是的,我正在进行模式迁移。我尝试了你的答案,但是我得到这个错误:'类型'MigrationObject'的值(又名'DynamicObject')没有成员'id''对象有一个id字段,所以它不应该显示错误。 – Dan
这实际上应该是'other [“id”]'和'other [“str”]'。您得到错误消息@Daniel的原因是,迁移块中的Realm对象不是您的类型化模型(在处理来自旧模式版本的对象时,显然不适用,而这些对象的类型化模型已不在其周围)。 – jpsim
我已经更新了答案以反映这一点。现在应该是正确的。 – jpsim