使用UILocalizedIndexedCollat​​ion和localizedStandardCompare:方法对字符串进行排序

时间:2012-07-17 13:24:45

标签: ios sorting core-data localized

使用此选项(用于内存中排序)时排序顺序是否有任何差异

[[UILocalizedIndexedCollation currentCollation] sortedArrayFromArray:namesArray collationStringSelector:@selector(sortName)]

和此(用于CoreData排序)

fetchRequest.sortDescriptors =
    [NSArray arrayWithObject:[NSSortDescriptor
                              sortDescriptorWithKey:@"name" ascending:YES
                              selector:@selector(localizedStandardCompare:)]];

我想用CoreData存储一个庞大的数据集,然后在TableView中显示它。在这种情况下,如果任何记录发生变化,我将需要使用第一种方法求助整个数组,这需要一段时间,所以第二种方法更为可取。

我知道对于英语语言,排序顺序应该是相同的,但我真的不知道使用变音符号和使用非拉丁字母的语言。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

一个区别是,对于UILocalizedIndexedCollation,当您的语言环境为en_US时,非拉丁字符似乎会以语音方式进行排序。例如,在英文版iPhone上,ス(发音为“su”)将与“S”一起出现在“S”之下。使用localizedStandardCompare:时,相同的ス字符将在Z之后进入。

带有变音符号的拉丁字符似乎对两种排序都采用相同的方式(例如“Aaa”<“Åab”<“Aac”同时包含UILocalizedIndexedCollationlocalizedStandardCompare:

可能存在更多差异,尤其是当您开始将设备设置为其他语言环境时。我不知道如何让CoreData以与UILocalizedIndexedCollation相同的方式进行排序,因此根据需要使用内存数组或完全避免使用UILocalizedIndexedCollation。如果有人知道更好的方式,那就太棒了。