按俄语字母顺序对 UITableView 进行排序
Posted
技术标签:
【中文标题】按俄语字母顺序对 UITableView 进行排序【英文标题】:Sort UITableView in Russian alphabetical order 【发布时间】:2010-11-02 20:31:15 【问题描述】:我是菜鸟,我很抱歉,因为这个问题真的很愚蠢。我有一个 NSArray,其中包含俄语 NSDictionaries 中 UITableView 行的标题,我需要按字母顺序对这些标题进行排序。我该怎么做?
请帮帮我。
提前致谢!
【问题讨论】:
【参考方案1】:在 ios 4.0 及更高版本上,您可以使用排序描述符。假设 title
是您的标题字符串存储在字典中的键:
NSArray *sortedArray = [myArray sortedArrayUsingDescriptors:
[NSArray arrayWithObject:
[NSSortDescriptor sortDescriptorWithKey:@"title"
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)]]];
另一种选择是使用基于块的排序方法:
NSArray *sortedArray = [myArray sortedArrayUsingComparator:^(id obj1, id obj2)
NSString *string1 = [(NSDictionary *)obj1 objectForKey:@"title"];
NSString *string2 = [(NSDictionary *)obj2 objectForKey:@"title"];
return [string1 localizedCaseInsensitiveCompare:string2];
];
但是,如果您需要您的应用在 iOS 3.1.3 及更早版本上运行,您可以:
在 NSDictionary 上编写一个比较方法作为类别并将其传递给-sortedArrayUsingSelector:
,或者
编写一个比较函数并将其传递给-sortedArrayUsingFunction:context:
。
在每种情况下,您的方法或函数的主体都将与上面第二个示例中的块主体基本相同。 NSArray class reference 包含这两种技术的示例。
【讨论】:
谢谢!它适用于名称是两个不同单词的标题。但是,如果有两个词并且第一个词对两者都相同,则应用程序崩溃:( 真的吗?奇怪...崩溃发生在哪里,在您的代码中还是在本地化CaseInsensitiveCompare 中? 不,它发生在我的代码中,尽管没有排序一切正常。它在 NSDictionary * dictionary = [sortedArray objectAtIndex:indexPath.row]; 处崩溃,控制台显示 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString objectAtIndex:]:无法识别的选择器发送到实例 0x6999e80' UPD:想通了,这是我的代码的错。非常感谢!你是救生员! 看起来你以某种方式将 NSString 分配给 sortedArray 而不是 -sortedArrayUsingXXX 的返回值。不知道你会如何意外地做到这一点,因为它需要演员。你确定那是引发异常的那一行吗?【参考方案2】:我认为这会对您的数组进行排序:
NSArray *sortedArray = [anArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
【讨论】:
不幸的是,我收到一个错误:'NSInvalidArgumentException',原因:'-[__NSCFDictionarylocalizedCaseInsensitiveCompare:]: unrecognized selector sent to instance 0x5f7f260' 你确定你的 NSArray 包含 NSStrings 吗?您可能想要迭代它,记录每个字符串 - 只是为了检查。我以前见过类似的问题,如果我没记错的话,我是过度释放数组的元素然后尝试访问它们。 不,它不包含 NSStrings,它包含带有 NSStrings 的 NSDictionaries。抱歉,我可能不清楚以上是关于按俄语字母顺序对 UITableView 进行排序的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 中按字母顺序对 MediaQuery 的 ArtistQuery 数组进行排序