自定义NSSortDescriptor NSFetchedResultsController
我有一个自定义的“排序”,我目前正在执行一组数据。 我现在需要在NSFetchedResultsController中的fetchedObjects上执行此类排序。 我们所有的表数据都与核心数据获取结果一起工作,因此用泛型数组替换数据源一直存在问题。
由于NSFetchedResultsController可以使用NSSortDescriptors,因此它是最好的路线。 问题是我不知道如何将这种排序算法转换为自定义比较器。
如何将其转换为自定义比较器(如果可能)? (如果不是我在使用NSFetchedResultsController时如何获得所需的排序结果)。 实质上,“优先级”字段可以是“高”“正常”或“低”,并且列表需要按照该顺序排序。
+(NSArray*)sortActionItemsByPriority:(NSArray*)listOfActionitemsToSort
{
NSMutableArray *sortedArray = [[NSMutableArray alloc]initWithCapacity:listOfActionitemsToSort.count];
NSMutableArray *highArray = [[NSMutableArray alloc]init];
NSMutableArray *normalArray = [[NSMutableArray alloc]init];
NSMutableArray *lowArray = [[NSMutableArray alloc]init];
for (int x = 0; x < listOfActionitemsToSort.count; x++)
{
ActionItem *item = [listOfActionitemsToSort objectAtIndex:x];
if ([item.priority caseInsensitiveCompare:@"high"] == NSOrderedSame)
[highArray addObject:item];
else if ([item.priority caseInsensitiveCompare:@"normal"] == NSOrderedSame)
[normalArray addObject:item];
else
[lowArray addObject:item];
}
[sortedArray addObjectsFromArray:highArray];
[sortedArray addObjectsFromArray:normalArray];
[sortedArray addObjectsFromArray:lowArray];
return sortedArray;
}
更新尝试使用NSComparisonResult块,但NSFetchedResultsController不允许
还尝试使用暂时的核心数据属性,然后计算我可以排序的字段。 但是这种排序发生在字段计算之前,所以不起作用。
我尝试设置每个优先级类型的部分 - 哪些工作。 但它没有以正确的顺序显示,显然你不能用核心数据来订购部分。
任何其他想法?
这个怎么样?
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"priority" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {
if ([obj1 isEqualToString:obj2]) {
return NSOrderedSame;
} else if ([obj1 isEqualToString:@"high"] || [obj2 isEqualToString:@"low"]) {
return NSOrderedAscending;
} else if ([obj2 isEqualToString:@"high"] || [obj1 isEqualToString:@"low"]) {
return NSOrderedDescending;
}
return NSOrderedSame;
}];
链接地址: http://www.djcxy.com/p/6147.html