2016-11-20 1 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 

Как я могу перенести старые свойства в новое свойство, которое является другим объектом?

EDIT: Временно, я решил его с

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, поэтому он не должен показывать ошибку. – Dan

+0

Это должно быть 'other [" id "]' и 'other [" str "]'. Причина, по которой вы получаете сообщение об ошибке @Daniel, заключается в том, что объекты Realm в блоке миграции не являются вашими типизированными моделями (которые, очевидно, не будут работать при работе с объектами из старых версий схемы, чьи типизированные модели больше не существуют). – jpsim

+0

Я обновил ответ, чтобы отразить это. Теперь это должно быть правильно. – jpsim

Смежные вопросы