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()
我实际上为 ChildObject
的 children
属性 使用了不同的 EmbeddedObject
,但看起来问题是一样的。
问题
我尝试嵌入嵌套 objects 的原因是为了避免必须管理级联删除。但是,我目前被困住了。是否有避免级联删除的替代解决方案?
旁白
将 ChildObject
的 children
编码为 Data
解决了这个问题,但这种方法感觉像是 hack 并且并非没有其他问题。
我目前正在使用 RealmSwift
v10.1.3。
事实证明,对 ChildObject
的 children
属性 的列表元素使用不同的 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?
}
如标题中的错误消息所述,我有一个嵌套嵌入 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()
我实际上为 ChildObject
的 children
属性 使用了不同的 EmbeddedObject
,但看起来问题是一样的。
问题
我尝试嵌入嵌套 objects 的原因是为了避免必须管理级联删除。但是,我目前被困住了。是否有避免级联删除的替代解决方案?
旁白
将 ChildObject
的 children
编码为 Data
解决了这个问题,但这种方法感觉像是 hack 并且并非没有其他问题。
我目前正在使用 RealmSwift
v10.1.3。
事实证明,对 ChildObject
的 children
属性 的列表元素使用不同的 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?
}