【发布时间】:2011-01-02 01:25:14
【问题描述】:
有谁知道如何获取一些按字母顺序排序但忽略大小写的结果?
【问题讨论】:
标签: iphone sorting core-data nssortdescriptor
有谁知道如何获取一些按字母顺序排序但忽略大小写的结果?
【问题讨论】:
标签: iphone sorting core-data nssortdescriptor
查看NSPredicate programming guide,但基本上使用 [c] 忽略大小写:
@"firstName BEGINSWITH[c] $FIRST_NAME"
【讨论】:
感谢您的回复,但我需要对一个简单的“查询”忽略大小写的结果进行排序。您的建议适用于搜索和比较。
SQL 来说,我需要一个ORDER BY firstName ASC,而且这个命令必须不区分大小写才能使用。
我进行了一些谷歌搜索,并阅读了NSSortDescriptor Class reference,我可以找到我的问题的答案。解决方案是将选择器设置为排序描述符,如下所示:
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES selector:@selector(caseInsensitiveCompare:)];
希望对更多人有用。
【讨论】:
COLLATE NSCollateNoCase 或 COLLATE NSCollateLocaleSensitiveNoCase 放在 localizedCaseInsensitiveCompare: 之后,放在 ORDER BY 之后。在 iOS 6 模拟器和 iOS 7 设备上测试。
[NSSortDescriptor(key: "string", ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:)))]
如果应用已本地化为多种语言,请考虑使用localizedCaseInsensitiveCompare: 选择器而不是caseInsensitiveCompare。它将具有避免字母“é”在字母“e”之后的效果。
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
【讨论】:
Swift 版本:
let sortDescriptor = NSSortDescriptor(key: "firstName", ascending: true, selector: #selector(NSString.localizedCaseInsensitiveCompare))
【讨论】: