我需要在realm中写入类的所有子对象吗?

4

以下是示例代码:

// Define your models like regular Swift classes
class Dog: Object {
  dynamic var name = ""
  dynamic var age = 0
}
class Person: Object {
  dynamic var name = ""
  dynamic var picture: NSData? = nil // optionals supported
  let dogs = List<Dog>()
}

// Use them like regular Swift objects
let myperson = Person()
let mydog = Dog()
mydog.name = "Rex"
myperson.dogs.append(mydog)

// Persist your data easily
let realm = try! Realm()
try! realm.write {
  // do I need to add this statement??
  realm.add(mydog)
  realm.add(myperson)
}

我需要持久化mydog对象吗?还是Realm已经足够智能知道它是myperson的一个新子对象,并将为我持久化它?

2个回答

3
不需要持久化实际的狗对象,如果你已经持久化了一个包含它的对象。

哇,感谢您的快速回答。如果狗包含新对象和从过滤器返回的对象(例如realm.Objects(dogs).filter(dogs.age = 3)),那怎么办?Realm会知道哪些是新的,哪些已经在数据库中了吗? - dickyj
我相信Realm有效地创建了一个对象图。因此,如果给定的对象发生更改,它将被完全覆盖。Realm不需要进行差异比较。 - Woodstock
没问题。如果还有其他问题,请告诉我。 - Woodstock
@Woodstock,删除部分怎么样?在删除父对象时,它会同时删除子项吗? - Cerlin
@CerlinBoss 是的,确实如此。 - Woodstock
1
它没有被删除。我不得不查询子实体并单独删除它们。 - Cerlin

1

对于想了解级联删除的用户,答案是不支持

Realm支持级联写入,但不支持级联删除。如果要删除,您可能需要查询所有相关关系并逐个删除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接