【问题标题】:Sort UITableView in Russian alphabetical order按俄语字母顺序对 UITableView 进行排序
【发布时间】:2010-11-02 20:31:15
【问题描述】:

我是菜鸟,我很抱歉,因为这个问题真的很愚蠢。我有一个 NSArray,其中包含俄语 NSDictionaries 中 UITableView 行的标题,我需要按字母顺序对这些标题进行排序。我该怎么做?

请帮帮我。

提前致谢!

【问题讨论】:

    标签: iphone uitableview ios


    【解决方案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。抱歉,我可能不清楚
    猜你喜欢
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多