我使用NSFetchedResultsController从Core Data中获取数据库。我有一个具有2个属性的实体,NSString的prop1和prop2 我如何不仅通过其中一个属性对两个部分进行排序? 现在是:
Title1ForProp1/Title2ForProp2 (prop1==1 prop2==2)
Title1ForProp1/Title1ForProp2 (prop1==1 prop2==1)
Title2ForProp1/Title1ForProp2 (prop1==2 prop2==1)
我需要:
Title1ForProp1/Title1ForProp2 (prop1==1 prop2==1)
Title1ForProp1/Title2ForProp2 (prop1==1 prop2==2)
Title2ForProp1/Title1ForProp2 (prop1==2 prop2==1)
答案 0 :(得分:3)
当您为NSFC创建获取请求时,您将创建排序描述符并为请求提供一个数组。
您可以根据需要在数组中放置尽可能多的排序描述符。
只需为要排序的每个字段创建一个排序描述符。
我记得你必须将它们放入数组中的顺序。
好的,所以代码明智......
NSSortDescriptor *sd1 = [[NSSortDescriptor alloc] initWithKey:@"prop1" ascending:YES];
NSSortDescriptor *sd2 = [[NSSortDescriptor alloc] initWithKey:@"prop2" ascending:YES];
[fetchRequest setSortDescriptors:@[sd1, sd2]];
这就是你所要做的一切。
如果你给它一个sectionNameKeyPath,NSFC只会将它们分成几个部分。如果您不想要任何部分,请将sectionNameKeyPath设为nil。
答案 1 :(得分:1)
Fogmeister的排序描述符数组是合适的(在prop1然后prop2上排序)但是如果你在sectionNameKeyPath
中提供prop1,你的部分将只被prop1分解。在每个部分中,项目将按prop1和prop2进行排序。
如果这不是你想要的,你需要另外将prop1和prop2的结果分组,你可能想要创建一个瞬态属性,它连接prop1和prop2,并提供瞬态属性作为你的{{1 }}。这不仅提供了该部分的标题,还确定了如何将结果分组到各个部分中。
看看这个问题,了解如何为节名创建瞬态属性: NSFetchedResultsController with sections created by first letter of a string