在 Coredata 中存储自定义 Class 类型数组

Storing Custom Class type array in Coredata

我正在尝试在 coredata 中存储自定义 class 类型的数组。

我设置的是一个名为 Node 的实体,其属性 value 类型为字符串,children 类型为 Transformablechildren 属性 应该存储类型为 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 的 classes。Class 'Node' 不采用它。” 所以我尝试使用 String 数组而不是 Node 数组,它似乎可以工作。

我猜想需要做一些额外的事情来存储自定义数组类型。

听起来你想要一个递归数据结构,其中每个节点可以有许多其他节点作为 children 和另一个节点作为它的 parent。这就是 CoreData 关系的用途。

在您的 Node 实体下:

  1. 添加“对多”类型的关系 children 与目的地 Node。没有逆.
  2. 添加类型为“一对一”的关系 parent 与目的地 Node,将其倒数设置为 children
  3. 返回 children 关系并将其逆设置为 parent
  4. 考虑删除规则应该是什么。我建议 children 使用“Cascade”,意思是如果你删除一个 parent,它的所有 children 也会被删除。 “Nullify”对 parent 有意义,这意味着如果您删除 child,它只会删除 parent 与那个 child.
  5. 的连接