在Swift中初始化没有数据的Realm对象

时间:2017-02-08 01:06:24

标签: swift realm

假设我有一个Dog对象,其中包含对Toy对象的引用:

class Dog: Object {

  dynamic var toy: Toy!

  convenience init(toyId: String) {
    self.init()

    let realm = try! Realm()
    toy = realm.object(ofType: Toy.self, forPrimaryKey: toyId)
  }
}

在这个例子中,假设我有一堆已经在Realm中创建的玩具,我想创建一个狗的新实例,而我所拥有的只是玩具ID(不是实际的玩具对象)。 / p>

在上面的示例中,我可以通过查找玩具来完成这项工作,但如果我一次创建一堆狗,这似乎效率低下。

我想,另一个选择是提前取出所有玩具,然后将实际玩具对象传递给狗初始化器。

我的问题是,如果我只是想创造一只新狗并将其与现有玩具联系起来,那么这可以在不需要取出玩具的情况下完成吗?

我是Realm的新手,但是当我过去使用Parse时,他们为这种情况设置了一个特殊的初始化器:

PFObject(withoutDataWithClassName: <String>, objectId: <String?>)

这个想法是你可以从主键引用一个对象,并且只有在你最终需要时才获取数据。这似乎是我想要做的事情。

1 个答案:

答案 0 :(得分:2)

  

我的问题是,如果我只是想创造一只新狗并将其与现有玩具联系起来,那么这可以在不需要取出玩具的情况下完成吗?

有必要拿起玩具来建立它与狗之间的关系。

值得注意的是,通过主键查找对象不会导致该对象的任何属性被加载到内存中。返回的对象只是指向磁盘上Realm文件中特定对象的指针。只有在访问对象时,对象的属性才会被读入内存。