问题描述
我正在尝试在 coredata 中存储自定义类类型数组。
我设置的是一个名为 Node
的实体,其属性为字符串类型的 value
和类型为 children
的 Transformable
。 children
属性应该存储类型为 Node
的数组,如下面的代码所示。
public class Node: NSManagedobject {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Node> {
return NSFetchRequest<Node>(entityName: "Person")
}
@NSManaged public var children: [Node]?
@NSManaged public var value: String?
}
.xcdatamodel
设置:
目前应用程序崩溃并显示错误消息“此解码器将仅解码采用 NSSecureCoding 的类。类‘节点’不采用它。” 所以我用 String 数组而不是 Node 数组尝试了它,它似乎有效。
解决方法
听起来您想要一个递归数据结构,其中每个节点可以有许多其他节点作为子节点,另一个节点作为其父节点。这就是 CoreData 关系的用途。
在您的 Node
实体下:
- 添加类型为“To Many”的关系
children
与目标Node
。没有逆。 - 添加类型为“To One”的关系
parent
与目标Node
,将其逆设置为children
- 回到
children
关系并将其逆设置为parent
- 考虑删除规则应该是什么。我建议
children
使用“级联”,这意味着如果您删除父级,它的所有子级也会被删除。 “Nullify”对parent
有意义,这意味着如果您删除一个孩子,它只会删除父母与该孩子的联系。