繁体   English   中英

如何过滤具有日期范围的嵌套 CoreData 实体并获取与给定属性的嵌套关系的总和?

[英]How do I filter nested CoreData entities with a date range and get the sum of nested relationship with a given attribute?

我正在开发一个 SwiftUI/CoreData 笔记应用程序,它允许用户在文件夹中组织笔记。 文件夹可以包含子文件夹或注释。 子文件夹还可以包含子子文件夹和注释等,深度没有限制。 这种方法类似于 iOS 文件夹应用程序。 当一个人完成它的工作时,一个笔记可以被标记为“完成”。 用户还可以在主视图中 select 日期范围以按日期过滤注释。 我已经构建了以下 model:

模型

其中文件夹与文件夹具有一对多关系,与便笺具有一对多关系。 在我目前的方法中,我正在使用没有父级(因此是树的根节点)的所有文件夹的列表。 @State 变量amountOfDaysShown保存当前选定的日期范围。

@FetchRequest(
  entity: Folder.entity(),
  sortDescriptors: [
    NSSortDescriptor(keyPath: \Folder.title, ascending: true)
  ],
  predicate: NSPredicate(format: "folder == nil"),
  animation: .easeInOut
) var folders: FetchedResults<Folder>

...

List {
    ForEach(self.folders, id: \.id) { folder in
      NavigationLink(
        destination:
          FolderNotesView(
            folder: folder,
            amountOfDaysShown: $amountOfDaysShown
          )
        )

FolderNotesView获取与传递给它的文件夹匹配的所有笔记,同时还按给定日期范围进行过滤:

    self._folderNotes = FetchRequest<Note>(
      entity: Note.entity(),
      sortDescriptors: [],
      predicate: NSCompoundPredicate(
        type: .and,
        subpredicates: [intervalPredicate, NSPredicate(format: "folder == %@", folder)]
      )
    )

在相应的视图中,我将当前文件夹的所有子文件夹作为 ViewBuilder 传递给笔记列表,因此在同一个列表中显示子文件夹和笔记:

    NotesList(
      notes: folderNotes,
      amountOfDaysShown: $amountOfDaysShown
    ) {
      FolderNotesView(
        folder: folder.folders,
        amountOfDaysShown: $amountOfDaysShown
      )
    }

这一切都按预期工作。 我在主视图上有一个所有父文件夹的列表。 选择一个后,应用程序会导航到该文件夹内的文件夹和注释列表。 现在我面临两个问题:

  1. 我想计算文件夹中日期范围内的所有笔记及其所有子文件夹,并在父文件夹中显示计数。
  2. 我想计算日期范围内所有具有isDone == false的笔记并在父文件夹上显示计数。

目标应该是这样的:

在此处输入图像描述

其中红色数字是每个级别的音符总数,蓝色数字是所有具有isDone == false的音符的计数。 Apple Notes 仅计算当前级别的注释,而我想递归计算整个文件夹树。

我尝试递归地总结 CoreDataProperties 中文件夹的所有注释。 这有效,但计数不能按日期过滤。

我一直在研究的另一个解决方案是按照教程构建一棵树。 我的目标是获取所有文件夹(据我了解,默认情况下关系是faulted的,因此包含的注释是延迟加载的)。 然后,我将构建一个文件夹树及其相应的子文件夹等。然后我将获取日期范围内的所有笔记并将 map 提取到树中,同时汇总每个节点上isDone笔记的计数和计数。 然后将树传递给视图,将总提取请求减少到只有两个。 在纸面上,这似乎是一个很好的方法,但它感觉非常hacky和非SwiftUI,我最终无法让它工作。

什么是显示嵌套 CoreData 关系计数同时按日期范围过滤的好方法?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM