我在要排序的数据数组中有名称和距离字段;我可以按任何一个排序,但不能同时排在一起。我想首先按名称排序数据,然后是距离,但是当我一起使用这两个数据时,排序总是在列表中的第一个描述符上,第二个似乎被忽略。
NSSortDescriptor *nameSort = [[NSSortDescriptor alloc]
initWithKey:@"NAME"
ascending:YES
selector:@selector(localizedStandardCompare:)];
NSSortDescriptor *distanceSort = [[NSSortDescriptor alloc]
initWithKey:@"DISTANCE"
ascending:YES];
sortedArray = [featureSet.features sortedArrayUsingDescriptors:@[nameSort, distanceSort]];
[super.tableView reloadData];
答案 0 :(得分:1)
您所看到的行为绝对有意义 - " A& W#0338"来自" A& W#0339",所以没有更多的距离排序来确定。
如果您的所有数据都是以这种方式构建的 - 名称后跟#000 - 您可以为您的排序删除数字,然后您的距离排序可以完成其工作。您可以在模型层执行此操作,方法是将标题拆分为两个属性,即名称和位置编号,或者您可以在排序描述符中执行此操作。
NSSortDescriptor *nameSort = [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES comparator:^NSComparisonResult(NSString *str1, NSString *str2) {
NSString *title1 = [[str1 componentsSeparatedByString:@" #"] firstObject];
NSString *title2 = [[str2 componentsSeparatedByString:@" #"] firstObject];
return [title1 compare:title2];
}];
如果您使用此nameSort和您的distanceSort," A& W#0338"," 25 km"将在" A& W#0339"
之后出现