在 Coredata 中存储自定义 Class 类型数组
Storing Custom Class type array in Coredata
我正在尝试在 coredata 中存储自定义 class 类型的数组。
我设置的是一个名为 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 的 classes。Class 'Node' 不采用它。”
所以我尝试使用 String 数组而不是 Node 数组,它似乎可以工作。
我猜想需要做一些额外的事情来存储自定义数组类型。
听起来你想要一个递归数据结构,其中每个节点可以有许多其他节点作为 children 和另一个节点作为它的 parent。这就是 CoreData 关系的用途。
在您的 Node
实体下:
- 添加“对多”类型的关系
children
与目的地 Node
。没有逆.
- 添加类型为“一对一”的关系
parent
与目的地 Node
,将其倒数设置为 children
- 返回
children
关系并将其逆设置为 parent
- 考虑删除规则应该是什么。我建议
children
使用“Cascade”,意思是如果你删除一个 parent,它的所有 children 也会被删除。 “Nullify”对 parent
有意义,这意味着如果您删除 child,它只会删除 parent 与那个 child. 的连接
我正在尝试在 coredata 中存储自定义 class 类型的数组。
我设置的是一个名为 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 的 classes。Class 'Node' 不采用它。” 所以我尝试使用 String 数组而不是 Node 数组,它似乎可以工作。
我猜想需要做一些额外的事情来存储自定义数组类型。
听起来你想要一个递归数据结构,其中每个节点可以有许多其他节点作为 children 和另一个节点作为它的 parent。这就是 CoreData 关系的用途。
在您的 Node
实体下:
- 添加“对多”类型的关系
children
与目的地Node
。没有逆. - 添加类型为“一对一”的关系
parent
与目的地Node
,将其倒数设置为children
- 返回
children
关系并将其逆设置为parent
- 考虑删除规则应该是什么。我建议
children
使用“Cascade”,意思是如果你删除一个 parent,它的所有 children 也会被删除。 “Nullify”对parent
有意义,这意味着如果您删除 child,它只会删除 parent 与那个 child. 的连接