如何编写具有多个排序描述符的 NSFetchRequest?
How to write NSFetchRequest with multiple sort descriptors?
我有一个具有 dateOfBirth
属性的 Student
实体。
我想从 Student
实体中按出生日期升序获取所有学生,但按月份降序分组。
例如:同月的学生按升序分组在一起,但所有组都按降序排列。
Section 1: December 2019
-- student 1: DOB - 1 December 2019
-- student 2: DOB - 2 December 2019
-- student 3: DOB - 3 December 2019
Section 2: November 2019
-- student 1: DOB - 1 November 2019
-- student 2: DOB - 2 November 2019
-- student 3: DOB - 3 November 2019
Section 3: October 2019
-- student 1: DOB - 1 October 2019
-- student 2: DOB - 2 October 2019
-- student 3: DOB - 3 October 2019
是否可以写一个NSFetchRequest
来支持这个查询?我必须使用 NSFetchResultsController
来填充 UITableView
但我无法编写提取请求。
为了按 dateOfBirth
对学生进行分组,我有一个额外的属性,它是一个带有日期格式 yyyyMM
的 yearMonthString
。我正在使用 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
设为降序,则该部分内的学生将变为降序。
写这个获取请求的正确方法是什么?是否可以为部分提供不同的排序描述符?
使用两个排序描述符,一个按 year/month 排序(降序),另一个按出生日期排序(升序):
let groupSortDescriptor = NSSortDescriptor(key: #keyPath(Student.yearMonthString), ascending: false)
let dateSortDescriptor = NSSortDescriptor(key: #keyPath(Student.dateOfBirth), ascending: true)
studentFetchRequest.sortDescriptors = [groupSortDescriptor, dateSortDescriptor]
我有一个具有 dateOfBirth
属性的 Student
实体。
我想从 Student
实体中按出生日期升序获取所有学生,但按月份降序分组。
例如:同月的学生按升序分组在一起,但所有组都按降序排列。
Section 1: December 2019
-- student 1: DOB - 1 December 2019
-- student 2: DOB - 2 December 2019
-- student 3: DOB - 3 December 2019
Section 2: November 2019
-- student 1: DOB - 1 November 2019
-- student 2: DOB - 2 November 2019
-- student 3: DOB - 3 November 2019
Section 3: October 2019
-- student 1: DOB - 1 October 2019
-- student 2: DOB - 2 October 2019
-- student 3: DOB - 3 October 2019
是否可以写一个NSFetchRequest
来支持这个查询?我必须使用 NSFetchResultsController
来填充 UITableView
但我无法编写提取请求。
为了按 dateOfBirth
对学生进行分组,我有一个额外的属性,它是一个带有日期格式 yyyyMM
的 yearMonthString
。我正在使用 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
设为降序,则该部分内的学生将变为降序。
写这个获取请求的正确方法是什么?是否可以为部分提供不同的排序描述符?
使用两个排序描述符,一个按 year/month 排序(降序),另一个按出生日期排序(升序):
let groupSortDescriptor = NSSortDescriptor(key: #keyPath(Student.yearMonthString), ascending: false)
let dateSortDescriptor = NSSortDescriptor(key: #keyPath(Student.dateOfBirth), ascending: true)
studentFetchRequest.sortDescriptors = [groupSortDescriptor, dateSortDescriptor]