【问题标题】:How to write NSFetchRequest with multiple sort descriptors?如何使用多个排序描述符编写 NSFetchRequest?
【发布时间】: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


    【解决方案1】:

    使用两个排序描述符,一个按年/月排序(降序),另一个按出生日期排序(升序):

    let groupSortDescriptor = NSSortDescriptor(key: #keyPath(Student.yearMonthString), ascending: false)
    let dateSortDescriptor = NSSortDescriptor(key: #keyPath(Student.dateOfBirth), ascending: true)
    studentFetchRequest.sortDescriptors = [groupSortDescriptor, dateSortDescriptor]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多