2015-06-29 3 views
2

У меня есть 2 класса: Компания и Сотрудник. Оба наследуют Realm Объект класс.Realm-iOS: Ссылка на объект установлена ​​на ноль после сохранения

class Company:Object { 
    var name:String = "" 
    var employee:Employee? 

    override static func primaryKey() -> String? { 
     return "name" 
    } 
} 

class Employee:Object { 
    var name:String = "" 
    var age:Int = 0 

    override static func primaryKey() -> String? { 
     return "name" 
    } 
} 

заселить объекты

var emp = Employee() 
    emp.name = "Sachin" 
    emp.age = 35 

    var comp = Company() 
    comp.name = "BCCI" 

    comp.employee = emp 

    println("Before: \(comp.employee)") 

    var realm = Realm() 
    realm.write { 
     println("Before Add: \(comp.employee)") 
     realm.add(comp, update: true) 
     println("In Block: \(comp.employee)") 
    } 

    println("After: \(comp.employee)") 

Результат:

Перед: Сотрудник { имени = Sachin; возраст = 35; }
До Add: Employee { name = Sachin; возраст = 35; }
В блоке: ноль
После: ноль

ВОПРОС: Почему работник свойство объекта ноля компании после realm.add() операции? Есть предположения?

+0

И до 'add'? – Michal

+0

As - in 'write', но перед' add' ... – Michal

+0

он также печатает значение в блоке _write_, он установлен на _nil_ сразу после _add_ –

ответ

5

Для всех объектов Realm Swift (за исключением List), вам необходимо объявить свойства как dynamic. Изменение определений вашей модели на следующее должно помочь!

class Company:Object { 
    dynamic var name:String = "" 
    dynamic var employee:Employee? 

    override static func primaryKey() -> String? { 
     return "name" 
    } 
} 

class Employee:Object { 
    dynamic var name:String = "" 
    dynamic var age:Int = 0 

    override static func primaryKey() -> String? { 
     return "name" 
    } 
}