iPhone CoreData - 如何获取托管对象,并忽略大小写它们?

vfn*_*vfn 31 sorting iphone core-data nssortdescriptor

有谁知道如何获取一些结果按字母顺序排序但忽略大小写?

vfn*_*vfn 78

谢谢你的回复,但我需要对一个简单的"查询"忽略大小写的结果进行排序.您的建议适用于搜索和比较.

SQL说,我需要一个ORDER BY firstName ASC,这个命令必须对我的用法不区分大小写.

我做了一些谷歌搜索,我结束了阅读NSSortDescriptor类参考,我可以找到我的问题的答案.解决方案是将选择器设置为排序描述符,如下所示:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES selector:@selector(caseInsensitiveCompare:)];
Run Code Online (Sandbox Code Playgroud)

我希望它对更多人有用.

  • 我使用[启用了SQL日志](http://stackoverflow.com/a/6428693/1402846)对此进行了测试.事实证明iOS足够智能,可以在SQL中而不是在内存中进行排序,方法是在`ORDER BY`之后将`COLLATE NSCollat​​eNoCase`或`COLLATE NSCollat​​eLocaleSensitiveNoCase`用于`localizedCaseInsensitiveCompare:`.在iOS 6的模拟器和iOS 7的设备上测试. (5认同)

Mon*_*art 10

如果应用程序已本地化为多种语言,请考虑使用localizedCaseInsensitiveCompare:选择器而不是caseInsensitiveCompare.这将有效避免字母'é'在字母'e'之后.

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
Run Code Online (Sandbox Code Playgroud)


Ben*_*ieb 5

查看NSPredicate编程指南,但基本上使用[c]忽略大小写:

@"firstName BEGINSWITH[c] $FIRST_NAME"
Run Code Online (Sandbox Code Playgroud)