按俄语字母顺序对 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 数组进行排序

按字母顺序显示 UITableView NSArray

UITableView 排序部分

使用 NSFetchRequest 按日期和单元格按时区字母顺序对部分进行排序

根据字符串属性按字母顺序对对象数组进行排序

按文本宽度iOS对UITableView排序