与 Core Data 和 Swift 比较不区分大小写
Case Insensitive Compare with Core Data and Swift
以下代码无效:
let sortDescriptor = NSSortDescriptor(key: "name", ascending: true, selector:"caseInsensitiveCompare")
并报错如下:
'NSInvalidArgumentException',原因:'unsupported NSSortDescriptor selector: caseInsensitiveCompare'
似乎在 Objective-C 中运行良好。关于为什么会这样有什么想法吗?
编辑:似乎 Core Data/SQLite 无法做到这一点。在那种情况下,最好的选择是获取数组然后在代码中对其进行排序吗?
选择器是caseInsensitiveCompare:
,带冒号,可以和Core Data一起使用。
冒号在那里是因为该方法(NSString
的实例方法)接受一个参数(要比较的字符串)。
作为可与 Core Data 和 SQLite 一起使用的排序选择器列表
商店可以在
Persistent Store Types and Behaviors 核心数据编程指南。
Swift 3 - 5.0 语法
let sortDescriptor = NSSortDescriptor(key: "KeyName", ascending: true, selector: #selector(NSString.caseInsensitiveCompare))
Swift 5、SwiftUI语法
self._contacts = FetchRequest(
entity: Contact.entity(),
sortDescriptors: [
NSSortDescriptor(key: "name", ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:)))
],
predicate: predicate
)
以下代码无效:
let sortDescriptor = NSSortDescriptor(key: "name", ascending: true, selector:"caseInsensitiveCompare")
并报错如下: 'NSInvalidArgumentException',原因:'unsupported NSSortDescriptor selector: caseInsensitiveCompare'
似乎在 Objective-C 中运行良好。关于为什么会这样有什么想法吗?
编辑:似乎 Core Data/SQLite 无法做到这一点。在那种情况下,最好的选择是获取数组然后在代码中对其进行排序吗?
选择器是caseInsensitiveCompare:
,带冒号,可以和Core Data一起使用。
冒号在那里是因为该方法(NSString
的实例方法)接受一个参数(要比较的字符串)。
作为可与 Core Data 和 SQLite 一起使用的排序选择器列表 商店可以在 Persistent Store Types and Behaviors 核心数据编程指南。
Swift 3 - 5.0 语法
let sortDescriptor = NSSortDescriptor(key: "KeyName", ascending: true, selector: #selector(NSString.caseInsensitiveCompare))
Swift 5、SwiftUI语法
self._contacts = FetchRequest(
entity: Contact.entity(),
sortDescriptors: [
NSSortDescriptor(key: "name", ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:)))
],
predicate: predicate
)