我想按自定义字母顺序对NSArray进行排序。协议是我有一个包含对象状态的字符串数组。NSSortDescriptor自定义字母数字顺序
可用状态是entered, process, ready, done
。
现在,当我按正常顺序排列(按字母顺序排列)时,顺序将不正确(完成,输入,处理,准备就绪)。
我尝试下面的代码,命令它的正确方法:
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"state" ascending:YES comparator:^(id obj1, id obj2) {
if ([obj1 isEqualToString:@"entered"] && [obj2 isEqualToString:@"process"]) {
return (NSComparisonResult) NSOrderedAscending;
}
else if ([obj1 isEqualToString:@"process"] && [obj2 isEqualToString:@"entered"]) {
return (NSComparisonResult) NSOrderedDescending;
}
else if ([obj1 isEqualToString:@"process"] && [obj2 isEqualToString:@"ready"]) {
return (NSComparisonResult) NSOrderedAscending;
}
else if ([obj1 isEqualToString:@"ready"] && [obj2 isEqualToString:@"process"]) {
return (NSComparisonResult) NSOrderedDescending;
}
else if ([obj1 isEqualToString:@"ready"] && [obj2 isEqualToString:@"done"]) {
return (NSComparisonResult) NSOrderedAscending;
}
else if ([obj1 isEqualToString:@"done"] && [obj2 isEqualToString:@"ready"]) {
return (NSComparisonResult) NSOrderedDescending;
}
else {
return (NSComparisonResult) NSOrderedSame;
}
}];
我也只用单词的第一个字母尝试过,但没有工作过。
当我使用这个比较器时,它只是不命令resp。该数组保持“旧”顺序。
我吃错了什么?我不明白排序比较对吗?
感谢您的帮助,亲切的问候,朱利安
Hey Mundi!伟大的方法,谢谢!但现在:我怎样才能将NSString(使用状态名称)转换为_state_类型的对象?我无法更改数据库中的表示形式,因为我的应用程序“仅仅”是基于Web的应用程序的iOS包装器。 **虽然谢谢**! – 2012-04-02 22:02:58
与其他JSON或XML“字段”相同。将它们逐个匹配到您的自定义对象的属性。在这种情况下,可能只是一串if语句。 – Mundi 2012-04-02 23:36:42