【发布时间】:2020-04-16 03:28:05
【问题描述】:
我有一个Student 实体,它有一个dateOfBirth 属性。
我想从Student 实体获取所有学生,按出生日期的升序排列,但按月份的降序分组。
例如:属于同一月份的学生按升序分组,但所有分组按降序排列。
第 1 部分:2019 年 12 月
-- 学生 1:出生日期 - 2019 年 12 月 1 日
-- 学生 2:出生日期 - 2019 年 12 月 2 日
-- 学生 3:出生日期 - 2019 年 12 月 3 日
第 2 节:2019 年 11 月
-- 学生 1:出生日期 - 2019 年 11 月 1 日
-- 学生 2:出生日期 - 2019 年 11 月 2 日
-- 学生 3:出生日期 - 2019 年 11 月 3 日
第 3 部分:2019 年 10 月
-- 学生 1:出生日期 - 2019 年 10 月 1 日
-- 学生 2:出生日期 - 2019 年 10 月 2 日
-- 学生 3:出生日期 - 2019 年 10 月 3 日
是否可以写一个NSFetchRequest 来支持这个查询?我必须使用NSFetchResultsController 来填充UITableView,但我无法编写获取请求。
要按学生的dateOfBirth 对学生进行分组,我有一个额外的属性,即yearMonthString 和 dateFormat yyyyMM。我正在使用yearMonthString 属性来分组学生。
let studentFetchRequest: NSFetchRequest<Student> = Student.fetchRequest()
studentFetchRequest.predicate = NSPredicate(format: "%K != nil AND %K != nil", #keyPath(Student.dateOfBirth), #keyPath(Student.yearMonthString))
let dateSortDescriptor = NSSortDescriptor(key: #keyPath(Student.dateOfBirth), ascending: false)
studentFetchRequest.sortDescriptors = [dateSortDescriptor]
let frc = NSFetchedResultsController<Student>(fetchRequest: studentFetchRequest,
managedObjectContext: managedContext,
sectionNameKeyPath: #keyPath(Student.yearMonthString),
cacheName: nil)
如果我将dateSortDescriptor 设为升序,则所有部分也将变为升序,如果我将dateSortDescriptor 设为降序,则该部分中的学生将变为降序。
编写此获取请求的正确方法是什么?是否可以为各个部分提供不同的排序描述符?
【问题讨论】:
标签: ios swift core-data nsfetchedresultscontroller nsfetchrequest