Core data NSFetchedResultsController仅按第一个排序描述符排序
我发现一个问题,当数据更改时,NSFetchedResultsController只按Core data NSFetchedResultsController仅按第一个排序描述符排序,core-data,nsfetchedresultscontroller,Core Data,Nsfetchedresultscontroller,我发现一个问题,当数据更改时,NSFetchedResultsController只按sortDescriptors数组中的第一个NSSortDescriptor排序。真让人气愤 我正在使用NSFetchedResultsController来管理显示项目列表的tableview。这些项目具有基于number属性的固有顺序,但用户可以喜欢某个项目。收藏夹项显示在表视图的顶部,按编号属性排序 因此,模型看起来像这样: @接口事物:NSManagedObject @属性(非原子,保留)NSNumbe
sortDescriptors
数组中的第一个NSSortDescriptor
排序。真让人气愤
我正在使用NSFetchedResultsController来管理显示项目列表的tableview。这些项目具有基于number
属性的固有顺序,但用户可以喜欢某个项目。收藏夹项显示在表视图的顶部,按编号
属性排序
因此,模型看起来像这样:
@接口事物:NSManagedObject
@属性(非原子,保留)NSNumber*编号;
@属性(非原子,保留)NSNumber*收藏夹;
@结束
@实施事项
@动态数;
@动态收藏;
@结束
我正在配置我的NSFetchedResultsController
,如下所示:
-(无效)加载视图{
...
//
//为things表视图配置获取结果控制器
NSFetchRequest*fetchThings=[[NSFetchRequest alloc]init];
fetchChannels.entity=[NSEntityDescription entityForName:NSStringFromClass([Thing class])
inManagedObjectContext:[DataManager sharedInstance].managedObjectContext];
fetchThings.sortDescriptors=@[
[NSSortDescriptor SortDescriptor With Key:@“收藏夹”升序:否],
[NSSortDescriptor SortDescriptor With key:@“number”升序:是];
_fetchController=[[NSFetchedResultsController alloc]initWithFetchRequest:fetchThings
managedObjectContext:[DataManager sharedInstance]。managedObjectContext
sectionNameKeyPath:无
cacheName:nil];
n错误*错误=nil;
如果(![\u fetchController performFetch:&错误]){
NSLog(@“执行获取时出错!%@”,错误.localizedDescription);
}
}
最初加载表时,\u fetchController
会正确地对项目进行排序,因此您可能会得到如下结果:
-Thing:favorite=YES,number=2
-事物:最爱=是,数字=3
-事物:最爱=否,数字=1
-事物:最爱=否,数字=4
但是,如果您要取消最喜欢的东西2,它只按第一个排序描述符排序,列表如下所示:
-Thing:favorite=YES,number=3
-事物:最爱=否,数字=2
-事物:最爱=否,数字=1
-事物:最爱=否,数字=4
有没有人遇到过这个问题或找到了解决办法
更新
看起来,如果我喜欢所有的东西,那么不喜欢所有的东西,排序就会自动完成。这让我相信这可能是一个错误的问题?不幸的是,我也不知道如何解决这个问题。好的,我想出来了,这是我自己的错
仅仅因为该字段表示一个
BOOL
,并不意味着它实际上是一个BOOL
。Thing
模型中的收藏夹
字段实际上是一个NSNumber
,因此,它有3个状态,@(YES)
,@(NO)
,和nil
。一旦我确定我正确初始化了收藏夹
字段,排序又开始按预期工作了。你完全正确。我在排序方面也遇到了同样的问题,并且还指出,NSNumber中的bool值可以有3个状态YES、NO和nil。