如何对已知对象的NSArray进行排序,以确保FIRST记录等于已知对象?
问题描述:
如果我有一个对象和设置如:如何对已知对象的NSArray进行排序,以确保FIRST记录等于已知对象?
MyObject *objectOne = ....;
NSArray *arrayOfMyObjects = [self.someObject [email protected]"myObjects"] allObjects];
其中valueForKey = @“对象”是myObject的类型的一个的NSMutableSet,
如何准确我用排序,以确保(或在最少尝试确保)objectOne等于[arrayOfMyObjects objectAtIndex:0]
?
基本上确保NSArray的第一个对象等于我已知的对象? 这是为了UITableView的目的,并确保最上面的记录是objectOne何时加载?
我猜想有一些排序描述符需要欺骗,但不太确定语法?
谢谢!
答
你可以使用一个比较块,以确保它是第一:
MyObject *objectOne;
NSArray *array = [[self.someObject valueForKey:@"myObjects"] allObjects];
NSArray *sortedArray = [array sortedArrayUsingComparator:^(id obj1, id obj2) {
if(obj1 == objectOne) return (NSComparisonResult)NSOrderedAscending;
if(obj2 == objectOne) return (NSComparisonResult)NSOrderedDescending;
return (NSComparisonResult)NSOrderedSame;
}];
类型转换的回报率是消除不正确的参数类型的编译器警告。 NSOrdered...
的类型为enum _NSComparisonResult
,并且该方法期望NSComparator,其定义为NSComparisonResult ^(id obj1, id obj2)
,但NSComparisonResult
和enum _NSComparisonResult
不相同。
试过用这个。似乎没有做这项工作? NSOrderedAscending或NSOrderedDescending的返回到底是什么?这是说要将物体向上或向下移动吗? – 2011-03-29 15:56:24
将前两个返回值更改为NSOrderedDescending即可完成工作! – 2011-03-29 16:02:39
@Straddle我以为NSOrderedAscending意味着obj1应该在obj2之前,但也许我倒退了。你有没有尝试过第二次上升?他们不应该是一样的。 – ughoavgfhw 2011-03-29 18:16:57