【发布时间】:2020-03-07 21:56:45
【问题描述】:
我目前有 2 个实体:
- 列表
- 项目
这是一对多的关系,其中一个 List 可以有多个 Item。
项目有一个名为completed 的列。
我想从我的 NSFetchRequest 中获取 Lists completed Items 的计数。
我知道我可以简单地执行List.Items.count 来获取所有列表项的计数,但我也不知道如何获取completed 项的计数。
如何计算与 NSFetchRequest 中的特定列值的关系,甚至是 List.Items.count 的某种类型的过滤器/位置?
编辑
我不得不将 List 重命名为 MyList 并将 Item 重命名为 MyItem。
- MyList -> MyItem 在 Core Data 中是一对多的(所以我可以在获取的结果中使用 myList.myItems)
- MyItem -> MyList 在 Core Data 中是多对一的(因此我可以在获取的结果中使用 myItem.myList)
这是我获取数据的方式。首先我使用一个扩展:
extension MyList {
static func getAllMyLists() -> NSFetchRequest<MyList> {
let request: NSFetchRequest<MyList> = MyList.fetchRequest()
let sortDescriptor = NSSortDescriptor(key: "sortOrder", ascending: true)
request.sortDescriptors = [sortDescriptor]
return request
}
}
然后我在视图结构中使用@FetchRequest:
@FetchRequest(fetchRequest: MyList.getAllMyLists()) var myLists: FetchedResults<MyList>
就像我说的那样,我不知道如何添加我想要的谓词,以便结果包括 completed MyItems 的计数...我在回答中使用了一种糟糕的方法,没有使用由于缺乏知识,获取请求的全部潜力。
【问题讨论】:
-
使用谓词..
-
关于什么?一种表达?就像我说的那样,我不知道该怎么做。
-
不清楚您对已完成列表的意思是什么?它是一个所有项目都标记为已完成的列表。请添加您想要做的示例。
-
项目有一个名为
completed的列,它是一个布尔值。我想对每个列表中的completed项目进行计数。这是我在核心数据中建立的一对多关系... -
如果你只想计算完成,那么你可以在你的代码中使用
filter,比如lists.items.filter { $0.completed }.count