在 Core Data 中存储自定义类类型数组

问题描述 投票:0回答:1

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

我设置的是一个名为

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 的类。类“Node”不采用它。” 所以我尝试使用 String 数组而不是 Node 数组,它似乎有效。

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

arrays swift core-data transformable
1个回答
2
投票

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

在您的

Node
实体下:

  1. 添加“To Many”类型与目的地
    children
    的关系
    Node
    。无逆。
  2. 添加“To One”类型与目的地
    parent
    的关系
    Node
    ,将其逆设置为
    children
  3. 返回
    children
    关系并将其逆设置为
    parent
  4. 考虑删除规则应该是什么。我建议
    children
    使用“级联”,这意味着如果您删除父级,它的所有子级也会被删除。 “无效”对于
    parent
    有意义,这意味着如果您删除一个子项,它只会删除父项与该子项的连接。
© www.soinside.com 2019 - 2024. All rights reserved.