【问题标题】:Case Insensitive Compare with Core Data and Swift与 Core Data 和 Swift 比较不​​区分大小写
【发布时间】:2016-05-11 23:55:36
【问题描述】:

以下代码不起作用:

let sortDescriptor = NSSortDescriptor(key: "name", ascending: true, selector:"caseInsensitiveCompare")

并给出以下错误: 'NSInvalidArgumentException',原因:'不支持的 NSSortDescriptor 选择器:caseInsensitiveCompare'

在 Objective-C 中似乎可以正常工作。关于为什么会这样的任何想法?

编辑:似乎这对于 Core Data/SQLite 是不可能的。在这种情况下,获取数组并随后在代码中对其进行排序的最佳选择是什么?

【问题讨论】:

    标签: ios swift core-data nsfetchrequest


    【解决方案1】:

    Swift 3 - 5.0 语法

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

    【讨论】:

    • Swift 3 需要此语法。
    【解决方案2】:

    选择器是caseInsensitiveCompare:,带有冒号,您可以将它与Core Data 一起使用。

    冒号的存在是因为该方法(这是NSString 的实例方法)采用一个参数(要与之比较的字符串)。

    作为可与 Core Data 和 SQLite 一起使用的排序选择器列表 商店可以在 核心数据编程指南中的Persistent Store Types and Behaviors

    【讨论】:

      【解决方案3】:

      Swift 5,SwiftUI 语法

      self._contacts = FetchRequest(
                  entity: Contact.entity(),
                  sortDescriptors: [
                      NSSortDescriptor(key: "name", ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:)))
                  ],
                  predicate: predicate
              )
      

      【讨论】:

        猜你喜欢
        • 2017-07-29
        • 2021-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多