Swift Realm.io API自动映射父对象
我使用领域及其映射方法将JSON数据自动映射到我的模型及其子关系。它工作得很好,除非我在引用父模型的子模型上添加关系。映射完全失控,创建了不存在的其他条目 父模型:Swift Realm.io API自动映射父对象,swift,realm,Swift,Realm,我使用领域及其映射方法将JSON数据自动映射到我的模型及其子关系。它工作得很好,除非我在引用父模型的子模型上添加关系。映射完全失控,创建了不存在的其他条目 父模型: class Foo: Object { dynamic var id = 0 dynamic var title = "" let bars = List<Bar>() // Children override class func primaryKey() -> String { ret
class Foo: Object {
dynamic var id = 0
dynamic var title = ""
let bars = List<Bar>() // Children
override class func primaryKey() -> String {
return "id"
}
}
根据本文,我正在使用便利方法映射JSON:
let foos = JSON["foos"] as! [NSDictionary]
let realm = Realm()
realm.write {
for foo in foos {
realm.create(Foo.self, value: foo, update: true)
}
}
我知道我可以手动设置映射,但如果可能的话,我想使用方便的方法。有人知道如何设置这个吗?我想你最好使用
反向关系来代替ToOne关系。
Foo
类将是相同的。但是您将在Bar
类中更改foo
属性,如下所示
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
}
}
我认为你最好使用反向关系
来代替ToOne关系。
Foo
类将是相同的。但是您将在Bar
类中更改foo
属性,如下所示
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
}
}
伊斯梅尔的答案是正确的,我对此投了更高的票:Realm的查询引擎只适用于数据库中持久化的属性。如果要添加持久化的反向链接属性,必须自己设置
例如:
let foos = JSON["foos"] as! [NSDictionary]
let realm = Realm()
realm.write {
for foo in foos {
let persistedFoo = realm.create(Foo.self, value: foo, update: true)
for bar in persistedFoo.bars {
bar.foo = foo
}
}
}
伊斯梅尔的答案是正确的,我对此投了更高的票:Realm的查询引擎只适用于数据库中持久化的属性。如果要添加持久化的反向链接属性,必须自己设置
例如:
let foos = JSON["foos"] as! [NSDictionary]
let realm = Realm()
realm.write {
for foo in foos {
let persistedFoo = realm.create(Foo.self, value: foo, update: true)
for bar in persistedFoo.bars {
bar.foo = foo
}
}
}
let bars=List()
不应该是let bars=List()
let bars=List()
不应该是let bars=List()
谢谢-代码返回链接对象(Foo.self,forProperty:“bars”)。首先代码>是使此计算属性工作的原因。然而不幸的是,我无法用它进行领域查询,例如:Realm().objects(Bar).filter(“foo==%@”,foo)
失败,错误是在类型为“Bar”的对象中找不到'Property'foo'。谢谢-代码返回linkingObjects(foo.self,forProperty:“Bar”)。首先代码>是使此计算属性工作的原因。然而不幸的是,我无法用它进行领域查询,例如:Realm().objects(Bar).filter(“foo==%@”,foo)
失败,错误是在类型为“Bar”的对象中找不到'Property'foo'。谢谢,是的,他的答案是正确的,我没有预料到需要指定我将对其执行查询。但这解决了问题,谢谢!谢谢,是的,他的回答是正确的,我没有预料到需要指定我将对其执行查询。但这解决了问题,谢谢!