2012-01-08 59 views
4

我打算用下面的代码行:localizedCaseInsensitiveCompare和caseInsensitiveCompare:有什么区别?

[[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES selector:@selector(caseInsensitiveCompare:)]; 

“caseInsensitiveCompare”是,我已经习惯了使用上的字符串的方法。但是,所示的例子,我是从应用工作:

[[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; 

(区别在于本地化的词)。这个词有什么作用 - '本地化'方法与普通方法有什么不同?

Apple开发人员文档对于这两种方法的区别并不十分丰富。

+0

这只是一个定位法(也就是说,如果您的应用程序有多种语言,你应该使用它)。 – Emil 2012-01-08 10:37:22

回答

10

NSString提供了两种方法,caseInsensitiveCompare和localizedCaseInsensitiveCompare。

某些语言环境可能会定义不同的排序标准。如果您正在使用针对各种语言环境进行本地化的文本,请使用本地化版本。否则,请使用标准版本。

13

这意味着比较时比较器使用国家字符集。
在例如波兰的语言有字母L,其中,在设定的国家charaters,是L和M之间

在例子中,当我们有一个字符串:Ltest来,Ltest来,MTEST,ZTEST字符串:

caseInsensitiveCompare给出了在结果:Ltest来,MTEST,ZTEST,Ltest来
localizedCaseInsensitiveCompare给出了在结果:Ltest来,Ltest来,MTEST,ZTEST

5

localizedCaseInsensitiveCompare:caseInsensitiveCompare:本地化版本。由于它在英语语言环境中没有太大区别,它可以在波兰语中用于ł, ą, ę等,或用西班牙语用于ñ, é, á等或法语用于ç, è, ê等。它们在字母表中具有不同的位置,具体取决于语言环境。

5

在对数据进行排序时,localizedCaseInsensitiveCompare:方法将使用当前语言环境([NSLocale currentLocale])的任何规则。这些规则通常包括编号优先级,非ASCII字符排序等等。

基本上,除非您期望基于字符代码进行排序,否则您应该使用本地化方法。

如果您还没有本地化工作之前,我建议您查看以下链接: