Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用多个排序描述符编写NSFetchRequest?_Ios_Swift_Core Data_Nsfetchedresultscontroller_Nsfetchrequest - Fatal编程技术网

Ios 如何使用多个排序描述符编写NSFetchRequest?

Ios 如何使用多个排序描述符编写NSFetchRequest?,ios,swift,core-data,nsfetchedresultscontroller,nsfetchrequest,Ios,Swift,Core Data,Nsfetchedresultscontroller,Nsfetchrequest,我有一个Student实体,它具有dateOfBirth属性 我想从Student实体中按出生日期的升序提取所有学生,但按月份的降序分组 例如:属于同一月份的学生按升序分组,但所有分组均按降序排列 第一节:2019年12月 --学生1:DOB-2019年12月1日 --学生2:DOB-2019年12月2日 --学生3:DOB-2019年12月3日 第二节:2019年11月 --学生1:DOB-2019年11月1日 --学生2:DOB-2019年11月2日 --学生3:DOB-2019年11月3日

我有一个
Student
实体,它具有
dateOfBirth
属性

我想从
Student
实体中按出生日期的升序提取所有学生,但按月份的降序分组

例如:属于同一月份的学生按升序分组,但所有分组均按降序排列

第一节:2019年12月
--学生1:DOB-2019年12月1日
--学生2:DOB-2019年12月2日
--学生3:DOB-2019年12月3日
第二节:2019年11月
--学生1:DOB-2019年11月1日
--学生2:DOB-2019年11月2日
--学生3:DOB-2019年11月3日
第三节:2019年10月
--学生1:DOB-2019年10月1日
--学生2:DOB-2019年10月2日
--学生3:DOB-2019年10月3日

是否可以编写
NSFetchRequest
来支持此查询?我必须使用
NSFetchResultsController
来填充
UITableView
,但我无法编写提取请求

要按照学生的
出生日期对他们进行分组
我有一个额外的属性,它是一个
yearMonthString
,日期格式为
yyyyMM
。我正在使用
yearMonthString
属性对学生进行分组

let studentFetchRequest:NSFetchRequest=Student.fetchRequest()
studentFetchRequest.predicate=NSPredicate(格式:“%K!=nil和%K!=nil”、#键路径(Student.dateOfBirth)、#键路径(Student.yearMonthString))
让dateSortDescriptor=NSSortDescriptor(键:#键路径(Student.dateOfBirth),升序:false)
studentFetchRequest.sortDescriptors=[dateSortDescriptor]
让frc=NSFetchedResultsController(fetchRequest:studentFetchRequest,
managedObjectContext:managedContext,
sectionNameKeyPath:#keyPath(Student.yearMonthString),
缓存名称:nil)
如果我将
dateSortDescriptor
设置为升序,则所有部分也将变为升序;如果我将
dateSortDescriptor
设置为降序,则该部分中的学生将变为降序


写入此提取请求的正确方法是什么?是否可以为分区指定不同的排序描述符?

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

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