使用此选项(用于内存中排序)时排序顺序是否有任何差异
[[UILocalizedIndexedCollation currentCollation] sortedArrayFromArray:namesArray collationStringSelector:@selector(sortName)]
和此(用于CoreData排序)
fetchRequest.sortDescriptors =
[NSArray arrayWithObject:[NSSortDescriptor
sortDescriptorWithKey:@"name" ascending:YES
selector:@selector(localizedStandardCompare:)]];
我想用CoreData存储一个庞大的数据集,然后在TableView中显示它。在这种情况下,如果任何记录发生变化,我将需要使用第一种方法求助整个数组,这需要一段时间,所以第二种方法更为可取。
我知道对于英语语言,排序顺序应该是相同的,但我真的不知道使用变音符号和使用非拉丁字母的语言。
非常感谢您的帮助。
答案 0 :(得分:1)
一个区别是,对于UILocalizedIndexedCollation
,当您的语言环境为en_US时,非拉丁字符似乎会以语音方式进行排序。例如,在英文版iPhone上,ス(发音为“su”)将与“S”一起出现在“S”之下。使用localizedStandardCompare:
时,相同的ス字符将在Z之后进入。
带有变音符号的拉丁字符似乎对两种排序都采用相同的方式(例如“Aaa”<“Åab”<“Aac”同时包含UILocalizedIndexedCollation
和localizedStandardCompare:
。
可能存在更多差异,尤其是当您开始将设备设置为其他语言环境时。我不知道如何让CoreData以与UILocalizedIndexedCollation
相同的方式进行排序,因此根据需要使用内存数组或完全避免使用UILocalizedIndexedCollation
。如果有人知道更好的方式,那就太棒了。