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的原因是迁移块中的领域对象不是您的类型化模型(当处理来自旧模式版本的对象时,其类型化模型不再存在,这显然不起作用)。我更新了答案以反映这一点。现在应该是正确的。