Realm Swift Error: Cycles containing embedded objects are not currently supported

Realm Swift Error: Cycles containing embedded objects are not currently supported

如标题中的错误消息所述,我有一个嵌套嵌入 objects 的 Realm。也就是说,一个 parent Object 和一个 EmbeddedObject 包含另一个 EmbeddedObject.

获取 Realm 实例会产生以下错误:

Schema validation failed due to the following errors:

  • Cycles containing embedded objects are not currently supported: 'ChildObject.children'

例子

这是一个例子:

public final class ParentObject: Object {
    @objc dynamic public var primaryKey = ""

    public let children = List<ChildObject>()

    public override class func primaryKey() -> String? {
        "primaryKey"
    }
}

public final class ChildObject: EmbeddedObject {
    public let children = List<ChildObject>()
}

// Getting the default Realm will throw an error.
let _ = try! Realm()

我实际上为 ChildObjectchildren 属性 使用了不同的 EmbeddedObject,但看起来问题是一样的。

问题

我尝试嵌入嵌套 objects 的原因是为了避免必须管理级联删除。但是,我目前被困住了。是否有避免级联删除的替代解决方案?

旁白

ChildObjectchildren 编码为 Data 解决了这个问题,但这种方法感觉像是 hack 并且并非没有其他问题。

我目前正在使用 RealmSwift v10.1.3。

事实证明,对 ChildObjectchildren 属性 的列表元素使用不同的 EmbeddedObject 类型将解决此问题。解决方案如下所示:

final class ChildObject: EmbeddedObject {
    // Use `GrandChildObject` instead of `ChildObject` for `List.Element`.
    let children = List<GrandChildObject>()
}

final class GrandChildObject: EmbeddedObject {
    // ...
}

请确保避免在 GrandChildObject 中使用相同的类型,因为这似乎是 EmbeddedObject 的限制。例如,不要这样做:

final class GrandChildObject: EmbeddedObject {
    @objc dynamic var child: GrandChildObject?
}