我正在使用Realm及其REST API's映射方法将JSON数据自动映射到我的模型及其子关系。它工作得很好,除非我在引用父项的子模型上添加"To-One"关系。映射完全没有了,并创建了不存在的其他条目。
父模型:
class Foo: Object {
dynamic var id = 0
dynamic var title = ""
let bars = List<Bar>() // Children
override class func primaryKey() -> String {
return "id"
}
}
儿童模特:
class Bar: Object {
dynamic var id = 0
dynamic var title = ""
dynamic var foo = Foo() // Reference to parent
override class func primaryKey() -> String {
return "id
}
}
根据documentation我使用便捷方法映射JSON:
let foos = JSON["foos"] as! [NSDictionary]
let realm = Realm()
realm.write {
for foo in foos {
realm.create(Foo.self, value: foo, update: true)
}
}
我知道我可以手动设置映射,但我想尽可能使用便捷方法。有谁知道如何设置它?
答案 0 :(得分:3)
我认为最好将Inverse Relationships
用于ToOne关系。
Foo
类将是相同的。但是您将在foo
类中更改Bar
属性,如下所示。
class Bar: Object {
dynamic var id = 0
dynamic var title = ""
//dynamic var foo = Foo() // Reference to parent
dynamic var foo: FOO {
// Realm doesn't persist this property because it only has a getter defined
// Define "foo" as the inverse relationship to Foo.bars
return linkingObjects(Bar.self, forProperty: "bars").first as! Foo
}
override class func primaryKey() -> String {
return "id
}
}
答案 1 :(得分:1)
Ismail的回答是正确的,并且我已经对它进行了投票:Realm的查询引擎仅适用于数据库中持久存储的属性。如果您想添加一个持久的反向链接属性,您必须自己设置它。
例如:
ObjectInputStream