【问题标题】:iPhone CoreData - How to fetch managed objects, and sorting them ignoring case?iPhone CoreData - 如何获取托管对象,并忽略大小写对它们进行排序?
【发布时间】:2011-01-02 01:25:14
【问题描述】:

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

【问题讨论】:

    标签: iphone sorting core-data nssortdescriptor


    【解决方案1】:

    查看NSPredicate programming guide,但基本上使用 [c] 忽略大小写:

    @"firstName BEGINSWITH[c] $FIRST_NAME"
    

    【讨论】:

    • 嗨,本,谢谢!我可以找到我的问题的答案。我把它贴在这里。干杯,VFN
    【解决方案2】:

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

    SQL 来说,我需要一个ORDER BY firstName ASC,而且这个命令必须不区分大小写才能使用。

    我进行了一些谷歌搜索,并阅读了NSSortDescriptor Class reference,我可以找到我的问题的答案。解决方案是将选择器设置为排序描述符,如下所示:

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES selector:@selector(caseInsensitiveCompare:)];
    

    希望对更多人有用。

    【讨论】:

    • 不要忘记 caseInsensitiveCompare 后面的冒号:
    • 我用SQL logging enabled对此进行了测试。事实证明,iOS 足够聪明,可以在 SQL 中而不是在内存中进行排序,方法是将 COLLATE NSCollateNoCaseCOLLATE NSCollateLocaleSensitiveNoCase 放在 localizedCaseInsensitiveCompare: 之后,放在 ORDER BY 之后。在 iOS 6 模拟器和 iOS 7 设备上测试。
    • 对于那些正在寻找 > xCode 7 和 Swift 解决方案的人:[NSSortDescriptor(key: "string", ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:)))]
    【解决方案3】:

    如果应用已本地化为多种语言,请考虑使用localizedCaseInsensitiveCompare: 选择器而不是caseInsensitiveCompare。它将具有避免字母“é”在字母“e”之后的效果。

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
    

    【讨论】:

      【解决方案4】:

      Swift 版本:

      let sortDescriptor = NSSortDescriptor(key: "firstName", ascending: true, selector: #selector(NSString.localizedCaseInsensitiveCompare))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-10
        • 1970-01-01
        • 1970-01-01
        • 2012-07-19
        • 2018-11-14
        • 1970-01-01
        相关资源
        最近更新 更多