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

Ios 如何使用Realm Swift将旧属性迁移到新对象中,ios,swift,migration,realm,realm-migration,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 va

以前,我只有一个对象,它具有我需要的所有值。我把它们“重新组合”起来,制造出不同的物体。我向原始对象添加了具有新对象类型的属性。 如何将旧特性值指定给对象的特性

以下是我的对象的代码:

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 = ""
}
(更改了变量名)

我试图使用
便利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)

但我认为这不是正确的解决方案。因此,如果有人对此有解决方案,我将不胜感激。

假设您在架构迁移期间执行此操作,则需要使用
迁移。创建
来创建新对象,而不是它们的init。然后将它们设置在新对象上,如下所示:

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

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

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

是的,我正在进行模式迁移。我尝试了您的答案,但我得到了以下错误:
类型为“MigrationObject”(又名“DynamicObject”)的值没有成员“id”
该对象有一个id字段,因此它不应该显示错误。这实际上应该是
其他[“id”]
其他[“str”]
。您收到错误消息@Daniel的原因是迁移块中的领域对象不是您的类型化模型(当处理来自旧模式版本的对象时,其类型化模型不再存在,这显然不起作用)。我更新了答案以反映这一点。现在应该是正确的。是的,我正在进行模式迁移。我尝试了您的答案,但我得到了以下错误:
类型为“MigrationObject”(又名“DynamicObject”)的值没有成员“id”
该对象有一个id字段,因此它不应该显示错误。这实际上应该是
其他[“id”]
其他[“str”]
。您收到错误消息@Daniel的原因是迁移块中的领域对象不是您的类型化模型(当处理来自旧模式版本的对象时,其类型化模型不再存在,这显然不起作用)。我更新了答案以反映这一点。现在应该是正确的。