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)
  }
}