Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何对已知对象的NSArray进行排序,以确保第一条记录与已知对象相等?_Iphone_Cocoa Touch_Sorting_Ios4_Nsarray - Fatal编程技术网

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}的测试数组,看看它是否为这两个数组返回正确的顺序。