Iphone 如何对已知对象的NSArray进行排序,以确保第一条记录与已知对象相等?
如果我有一个对象和设置,例如:Iphone 如何对已知对象的NSArray进行排序,以确保第一条记录与已知对象相等?,iphone,cocoa-touch,sorting,ios4,nsarray,Iphone,Cocoa Touch,Sorting,Ios4,Nsarray,如果我有一个对象和设置,例如: MyObject *objectOne = ....; NSArray *arrayOfMyObjects = [self.someObject valueForKey=@"myObjects"] allObjects]; 其中valueForKey=@“objects”是MyObject类型的NSMutableSet 如何确切地使用排序来确保(或至少尝试确保)objectOne等于 [arrayOfMyObjects对象索引:0] 基本上确保NSArray的
MyObject *objectOne = ....;
NSArray *arrayOfMyObjects = [self.someObject valueForKey=@"myObjects"] allObjects];
其中valueForKey=@“objects”是MyObject类型的NSMutableSet
如何确切地使用排序来确保(或至少尝试确保)objectOne等于[arrayOfMyObjects对象索引: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;
}];
返回的类型转换是为了删除编译器对错误参数类型的警告
NSComparisonResult…
的类型为enum\u NSComparisonResult
,该方法需要一个NSComparisonResult^(id obj1,id obj2),但NSComparisonResult
和enum\u NSComparisonResult
不相同。尝试使用此方法。似乎做不到这项工作?究竟是什么原因导致了撤销或撤销监管的回归?这是说要将对象上移一个还是下移一个?更改前两个返回到下移完成任务@我原以为去数据化意味着obj1应该在obj2之前,但也许我是落后的。你试过第二次提升吗?它们不应该是相同的。不确定,但随着两者都设置为下倾,它每次都像一个符咒!如果一个人在下降,一个人在上升,它不会真的改变,是吗?因为objectOne只会不断上移或下移,这取决于它是否设置为obj1或obj2?知道我的意思吗?@Straddle如果你有一个错误和一个正确,它只会工作,只要一个通过了一个正确的回报。如果它在另一个对象中传递,它将告诉数组另一个对象应该在objectOne之前。使用{objectOne,someObject}和{someObject,objectOne}的测试数组,看看它是否为这两个数组返回正确的顺序。