Realm-iOS:对象引用在保存后设置为 nil
Realm-iOS: Object reference set to nil after save
我有 2 个 class:公司 和 员工。两者都继承了 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"
}
}
填充对象
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)")
结果:
Before: Employee {
name = Sachin;
age = 35;
}
Before Add: Employee {
name = Sachin;
age = 35;
}
In Block: nil
After: nil
问题:
为什么公司员工属性在realm.add()
操作后对象为nil?有什么想法吗?
对于所有 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"
}
}
我有 2 个 class:公司 和 员工。两者都继承了 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"
}
}
填充对象
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)")
结果:
Before: Employee { name = Sachin; age = 35; }
Before Add: Employee { name = Sachin; age = 35; }
In Block: nil
After: nil
问题:
为什么公司员工属性在realm.add()
操作后对象为nil?有什么想法吗?
对于所有 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"
}
}