Как перенести старые свойства в новый объект с помощью 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 создавать новые объекты, а не их иници. Затем вы должны установить их на новый объект, в соответствии с:

let other = migration.create(OtherObject.className())
other["id"] = 0
other["str"] = oldObject["otherStr"] as! String
newObject?["otherObjectVar"] = other
Другие вопросы по тегам