2013-03-25 108 views
1

我做具有以下謂詞的NSFetchRequest排序的NSArray通過NSOrderedSet

[NSPredicate predicateWithFormat:@"index IN %@", indexes]; 

...其中indexes是數字的NSOrderedSet

這給了我一個具有給定索引的「隨機排序」對象數組。我需要對此進行排序,以便對象以與排序集中相同的順序顯示。

什麼是最有效的方法來做到這一點?

更新

下面是根據馬丁的r答案類別:

@implementation NSArray (SortUsingValues) 

- (NSArray *)sortedArrayUsingValues:(NSOrderedSet *)values keyPath:(NSString *)keyPath 
{ 
    NSAssert([values isKindOfClass:[NSOrderedSet class]], nil); 
    NSAssert([keyPath isKindOfClass:[NSString class]], nil); 
    return [self sortedArrayUsingComparator:^NSComparisonResult(id object, id otherObject) { 
     id value = [object valueForKeyPath:keyPath]; 
     id otherValue = [otherObject valueForKeyPath:keyPath]; 
     NSUInteger indexOfValue = [values indexOfObject:value]; 
     NSUInteger indexOfOtherValue = [values indexOfObject:otherValue]; 
     if (indexOfValue > indexOfOtherValue) return NSOrderedDescending; 
     else if (indexOfValue < indexOfOtherValue) return NSOrderedAscending; 
     else return NSOrderedSame; 
    }]; 
} 

@end 

回答

1

我不能想辦法在執行此項任務的讀取請求使用排序描述符。但您可以根據索引在提取後對結果數組進行排序:

NSArray *sorted = [results sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
    NSUInteger idx1 = [indexes indexOfObject:[obj1 valueForKey:@"index"]]; 
    NSUInteger idx2 = [indexes indexOfObject:[obj2 valueForKey:@"index"]]; 
    return idx1 - idx2; 
}]; 
+0

謝謝,這正是我一直在尋找的。順便說一句,我剛剛根據你的答案更新了我的問題。 – 2013-03-25 15:35:09