如何对已知对象的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),但NSComparisonResultenum _NSComparisonResult不相同。

+0

试过用这个。似乎没有做这项工作? NSOrderedAscending或NSOrderedDescending的返回到底是什么?这是说要将物体向上或向下移动吗? – 2011-03-29 15:56:24

+0

将前两个返回值更改为NSOrderedDescending即可完成工作! – 2011-03-29 16:02:39

+0

@Straddle我以为NSOrderedAscending意味着obj1应该在obj2之前,但也许我倒退了。你有没有尝试过第二次上升?他们不应该是一样的。 – ughoavgfhw 2011-03-29 18:16:57