我正在尝试将我的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中的对象图一样快吗?
答案 0 :(得分:2)
崩溃的原因可能是初始化变为递归,当您创建节点时,它为其父节点创建节点,而节点又需要节点等。您可以检查堆栈跟踪以查看是否是这种情况。
Swift中的Realm支持可选对象属性,默认情况下它们设置为nil,因此您可以执行以下操作:
class DBNode: RLMObject {
dynamic var name = ""
dynamic var parent: DBNode?
dynamic var children = RLMArray(objectClassName: DBNode.className())
}
数组实际上不为零,并且它们必须初始化,但它们可以为空。
请注意,如果将对象及其父对象(或子对象)明确地添加到Realm中,则可能会抛出异常。它们将自动添加,因为您无法链接到对象不坚持。