【问题标题】:Realm-iOS: Object reference set to nil after saveRealm-iOS:保存后对象引用设置为零
【发布时间】:2015-06-29 14:18:02
【问题描述】:

我有 2 个班级:CompanyEmployee。两者都继承了 Realm Object 类。

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

结果:

之前:员工{ 名称=萨钦; 年龄 = 35; }
添加之前:员工{ 名称=萨钦; 年龄 = 35; }
在块中:无
之后:无

问题: 为什么realm.add() 操作后Company 对象的employee 属性为零?有什么想法吗?

【问题讨论】:

  • write 中,但在add 之前...
  • 它也打印 write 块中的值,它在 add 之后设置为 nil跨度>
  • 而 lldb 什么也没说?

标签: ios realm


【解决方案1】:

对于所有 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"
   }
}

【讨论】:

    猜你喜欢
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多