首页 > 解决方案 > 在 Coredata 中存储自定义类类型数组

问题描述

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

我设置的是一个名为string 和typeNode属性的实体。该属性应该存储一个类型数组,如下面的代码所示。valuechildrenTransformablechildrenNode

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 的类。类 'Node' 不采用它。” 所以我用字符串数组而不是节点数组尝试了它,它似乎工作。

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

标签: arraysswiftcore-datatransformable

解决方案


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

在您的Node实体下:

  1. 添加children类型为“To Many”的关系与 destination Node。没有逆。
  2. 添加parent类型“To One”与 destination的关系Node,将其逆设置为children
  3. 回到children关系并将其逆设置为parent
  4. 考虑删除规则应该是什么。我建议“级联” children,意思是如果你删除一个父级,它的所有子级也会被删除。“Nullify”对 有意义parent,这意味着如果您删除一个孩子,它只会删除父母与该孩子的连接。

推荐阅读