Core data 访问嵌套SwiftUI列表中的核心数据子对象
我的最终目标是创建一个包含孩子的快速用户界面Core data 访问嵌套SwiftUI列表中的核心数据子对象,core-data,swiftui,Core Data,Swiftui,我的最终目标是创建一个包含孩子的快速用户界面列表。我有包含项目(子项目)的部分(父项目),这些部分将展开和折叠项目列表 我已经用一个NSOutlineView使用领域构建了它,但现在我正试图用SwiftUI和核心数据构建它*大口喝*:) 我对核心数据不是很有经验,但我认为我的数据设置正确。我有一个部分实体和一个项目实体,部分有一个项目属性,该属性具有对多关系 因此,我假设(如下所示错误)部分。projects是Project对象的集合 为简单起见,我只是尝试将这两个嵌套在列表中(稍后我会担心
列表
。我有包含项目(子项目)的部分(父项目),这些部分将展开和折叠项目列表
我已经用一个NSOutlineView
使用领域构建了它,但现在我正试图用SwiftUI和核心数据构建它<代码>*大口喝*:)
我对核心数据不是很有经验,但我认为我的数据设置正确。我有一个部分
实体和一个项目
实体,部分
有一个项目
属性,该属性具有对多关系
因此,我假设(如下所示错误)部分。projects
是Project
对象的集合
为简单起见,我只是尝试将这两个嵌套在列表中(稍后我会担心披露组的内容):
列表{
ForEach(sections,id:\.recordName){section in
文本(节名)
ForEach(section.projects,id:\.recordName){project in//我在本文的帮助下解决了这个问题:
我必须更改我的核心数据实体,使其Codegen设置为Manual/None
(在Xcode中的.xcdatamodeld
编辑器中)。然后选择我的实体并转到编辑器>创建NSManagedObject子类…,它创建了一组反映我的核心数据模型的文件
然后在部分+CoreDataProperties.swift文件中,我添加了一个computed属性以允许我访问我的项目(按名称排序):
…这允许我的computed属性按名称对项目进行排序(因为核心数据默认情况下将字符串视为选项)
因此,我能够像这样迭代嵌套数据:
ForEach(sections, id: \.self) { section in
Text(section.wrappedName)
ForEach(section.projectArray, id: \.self) { project in
Text(project.wrappedName)
}
}
public var projectArray: [Project] {
let set = projects as? Set<Project> ?? []
return set.sorted {
$0.wrappedName < $1.wrappedName
}
}
public var wrappedName: String{
name ?? "Unknown Name"
}
ForEach(sections, id: \.self) { section in
Text(section.wrappedName)
ForEach(section.projectArray, id: \.self) { project in
Text(project.wrappedName)
}
}