我使用以下谓词执行NSFetchRequest:
[NSPredicate predicateWithFormat:@"index IN %@", indexes];..。其中indexes是数字的NSOrderedSet。
这为我提供了一个具有给定索引的“随机排序”对象数组。我需要对此进行排序,以便使对象以与有序集相同的顺序出现。
做这件事最有效的方法是什么?
更新
以下是基于Martin 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发布于 2013-03-25 15:08:59
我想不出在fetch请求中使用排序描述符的方法。但是,您可以根据索引在获取后对结果数组进行排序:
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;
}];https://stackoverflow.com/questions/15617795
复制相似问题