案例不敏感与核心数据和Swift的比较

Gau*_*rma 9 core-data nsfetchrequest ios swift

以下代码不起作用:

let sortDescriptor = NSSortDescriptor(key: "name", ascending: true, selector:"caseInsensitiveCompare")
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:看起来这可能与Core Data/SQLite无法实现.在这种情况下,获取数组并在之后的代码中对其进行排序是最好的选择吗?

小智 39

let sortDescriptor = NSSortDescriptor(key: "KeyName", ascending: true, selector: #selector(NSString.caseInsensitiveCompare))
Run Code Online (Sandbox Code Playgroud)

  • Swift 3需要此语法. (2认同)

Mar*_*n R 8

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

冒号在那里因为方法(它是一个实例方法NSString)接受一个参数(要与之比较的字符串).

可以在" 核心数据编程指南"中的" 持久存储类型和行为"中找到可与Core Data和SQLite存储一起使用的排序选择器列表 .


Mic*_*bro 7

Swift 5、SwiftUI 语法

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