0

我正在尝试将我的核心数据对象图移动到领域。

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

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

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

当我有一个名为 RLMNode 的领域对象时:RLMObject 与

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

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

我可以在 Realm 中做这种层次结构吗?

编辑:

看来我可以做到这一点,并且数组中只有一个节点:

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

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

4

1 回答 1

2

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

Swift 中的 Realm 支持可选的对象属性,它们默认设置为 nil,所以你可以这样做:

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

数组实际上不能为 nil,它们必须被初始化,但它们可以为空。

请注意,如果您将对象及其父(或子)显式添加到领域,则可能会引发异常。它们将自动添加,因为您无法链接到未持久化的对象。

于 2014-10-08T16:07:56.943 回答