Core data NSFetchResultsController+;sectionNameKeyPath+;区段顺序

Core data NSFetchResultsController+;sectionNameKeyPath+;区段顺序,core-data,nspredicate,nsfetchrequest,nssortdescriptor,Core Data,Nspredicate,Nsfetchrequest,Nssortdescriptor,我在两个实体之间有一对多实体关系: EntityP(父项)>EntityC(子项) 属性和关系: EntityP.title EntityP.dateTimeStamp EntityP.PtoC(关系) 实体名称 EntityC.dateTimeStamp EntityC.CtoP(关系)//可用于获取“一个”EntityP记录 我使用fetchresults控制器来显示结果。下面是我对fetch results controller的实现: #pragma标记- #pragma标记获取的结

我在两个实体之间有一对多实体关系:

EntityP(父项)>EntityC(子项)
属性和关系:

EntityP.title
EntityP.dateTimeStamp
EntityP.PtoC(关系)
实体名称
EntityC.dateTimeStamp
EntityC.CtoP(关系)//可用于获取“一个”EntityP记录
我使用fetchresults控制器来显示结果。下面是我对fetch results controller的实现:

#pragma标记-
#pragma标记获取的结果控制器
-(NSFetchedResultsController*)fetchedResultsController{
//如果需要,设置“获取结果”控制器
if(fetchedResultsController!=nil){
返回获取的ResultsController;
}
//为实体创建获取请求
NSFetchRequest*fetchRequest=[[NSFetchRequest alloc]init];
//集合实体
NSEntityDescription*entity=[NSEntityDescription entityForName:@“EntityC”在managedObjectContext:self.managedObjectContext]中;
[FetchRequestSetEntity:entity];
//集合谓词
//(忽略,我们要获取所有EntityC记录的列表)
//设置排序描述符(在父级上排序-对于节,然后在子级上排序-对于行)
NSSortDescriptor*sortDescriptorPDate=[[NSSortDescriptor alloc]initWithKey:@“CtoP.dateTimeStamp”升序:YES];
NSSortDescriptor*SORTDescriptor日期=[[NSSortDescriptor alloc]initWithKey:@“dateTimeStamp”升序:是];
NSArray*sortDescriptors=[[NSArray alloc]initWithObjects:sortDescriptorPDate,sortDescriptorDate,nil];
[FetchRequestSetSortDescriptors:sortDescriptors];
[fetchRequest setFetchBatchSize:20];
//创建并初始化“获取结果”控制器
NSFetchedResultsController*aFetchedResultsController=[[NSFetchedResultsController alloc]initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@“CtoP.title”cacheName:nil];
aFetchedResultsController.delegate=self;
self.fetchedResultsController=aFetchedResultsController;
//清理内存
[aFetchedResultsController释放];
[请求释放];
[SortDescriptorUpdate发布];
[sortDescriptorDate发布];
[sortDescriptors发布];
n错误*错误=nil;
如果(![fetchedResultsController性能检测:&错误]){
/*
将此实现替换为适当处理错误的代码。
abort()导致应用程序生成崩溃日志并终止。您不应在装运应用程序中使用此函数,尽管它在开发过程中可能很有用。如果无法从错误中恢复,请显示一个警告面板,指示用户通过按“主页”按钮退出应用程序。
*/
NSLog(@“未解决的错误%@,%@”,错误,[error userInfo]);
中止();
}
返回获取的ResultsController;
}     
现在,例如,如果持久性存储中有以下数据:

EntityP.dateTimeStamp EntityP.title EntityC.dateTimeStamp EntityC.title
今天B今天d
昨天A昨天A
今天B昨天c
昨天A今天b
注:昨天和今天为NSDate格式

然后,我应该按照以下顺序(准确地)获取节和行:

A
A.
B
B
C
D

但是,这种方法并不是这样工作的。我得到了正确的顺序行,但部分没有排序!我希望SortDescriptorUpdate正在做他的工作。我错过了什么?提前感谢。

我不确定是否理解您的设置,但


默认情况下,节标题是节名称的首字母大写。如果需要自定义节(例如基于日期的节),则需要将NSFetchedResultsController子类化,并重写各种
节索引…
方法以返回正确的节、节索引和节标题

这似乎正在起作用!我不确定是什么改变了!——穆斯塔法9月6日10日4点03分

我想你在为这篇文章抄写代码时出了点问题。我认为你现在在这里的一切都行不通。EntityP和EntityC在数据模型中实际上是分开的实体吗?它们似乎具有相同的属性,在代码中,您似乎将它们视为可互换的。是的,我相信我确实搞糟了一些事情。我已经更新了帖子,让它更清晰了。这似乎正在起作用!我不知道是什么改变了!问题不在于章节标题,而在于它们的排序顺序。