领域中的亲子关系

时间:2014-10-08 04:18:03

标签: realm

我正在尝试将我的Core Data对象图移动到Realm。

目前我有一个名为DBNode的实体,它有

@NSManaged var children: NSSet
@NSManaged var parentNode: DBNode

我可以存储父节点和节点的所有子节点。

当我有一个名为RLMNode的Realm对象:RLMObject with

dynamic var children = RLMArray(objectClassName: RLMNode.className())
dynamic var parent = RLMNode()

首次尝试添加对象时崩溃。

我可以在Realm中执行此分层结构吗?

编辑:

我似乎可以这样做,并且在数组中只有一个节点:

dynamic var parent = RLMArray(objectClassName:RLMNode.className())

这是推荐的方式吗?它与Core Data中的对象图一样快吗?

1 个答案:

答案 0 :(得分:2)

崩溃的原因可能是初始化变为递归,当您创建节点时,它为其父节点创建节点,而节点又需要节点等。您可以检查堆栈跟踪以查看是否是这种情况。

Swift中的Realm支持可选对象属性,默认情况下它们设置为nil,因此您可以执行以下操作:

class DBNode: RLMObject {
    dynamic var name = ""
    dynamic var parent: DBNode?
    dynamic var children = RLMArray(objectClassName: DBNode.className())
}

数组实际上为零,并且它们必须初始化,但它们可以为空。

请注意,如果将对象及其父对象(或子对象)明确地添加到Realm中,则可能会抛出异常。它们将自动添加,因为您无法链接到对象不坚持。