Realm.io API自动映射父对象

时间:2015-06-09 00:39:38

标签: swift realm

我正在使用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)
    }
  }

我知道我可以手动设置映射,但我想尽可能使用便捷方法。有谁知道如何设置它?

2 个答案:

答案 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