2014-12-31 38 views
0

我有一個自定義的「排序」,我目前正在一組數據上執行。我現在需要在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不允許

使用瞬時核心數據的屬性,然後計算,我可以排序字段也嘗試嘗試。但是這種排序發生在字段計算之前,所以不起作用。

我嘗試設置每個優先級類型的部分 - 哪些工作。但它沒有以正確的順序顯示,顯然你不能用核心數據來訂購部分。

還有其他想法嗎?

回答

0

這個怎麼樣?

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; 
    }]; 
+0

我不明白這是如何工作,我想。如果排序相同,那麼我們不排序這兩個對象。 obj1總是被移動的對象? – Spentak

+0

這適用於正常排序 - 但NSFetchedResultsController不能使用比較器:P – Spentak

相關問題