简体   繁体   中英

Realm-iOS: Object reference set to nil after save

I have 2 classes: Company and Employee . Both inherit the Realm Object class.

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"
   }
}

Populate the objects

    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)")

RESULT:

Before: Employee { name = Sachin; age = 35; }
Before Add: Employee { name = Sachin; age = 35; }
In Block: nil
After: nil

QUESTION: Why is the employee property of the Company object nil after the realm.add() operation? Any thoughts?

For all Realm Swift properties (except for List ), you need to declare the properties as dynamic . Changing your model definitions to the following should help!

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"
   }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM