我有一個自定義的「排序」,我目前正在一組數據上執行。我現在需要在NSFetchedResultsController中的fetchedObjects上執行此類排序。我們所有的表數據都與核心數據獲取結果一起工作,因此用泛型數組替換數據源一直存在問題。NSFetchedResultsController的自定義NSSortDescriptor
因爲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;
}
UPDATE 使用NSComparisonResult塊,但NSFetchedResultsController不允許
使用瞬時核心數據的屬性,然後計算,我可以排序字段也嘗試嘗試。但是這種排序發生在字段計算之前,所以不起作用。
我嘗試設置每個優先級類型的部分 - 哪些工作。但它沒有以正確的順序顯示,顯然你不能用核心數據來訂購部分。
還有其他想法嗎?
我不明白這是如何工作,我想。如果排序相同,那麼我們不排序這兩個對象。 obj1總是被移動的對象? – Spentak
這適用於正常排序 - 但NSFetchedResultsController不能使用比較器:P – Spentak