首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift中的NSSortDescriptor

Swift中的NSSortDescriptor
EN

Stack Overflow用户
提问于 2015-05-31 04:29:00
回答 7查看 21K关注 0票数 13

我正在开发一个iOS应用程序,我的数据存储在CoreData中,正在加载到UITableView中。数据实体有一个名为id的属性,它是一个字符串,包含一个A,后面跟着一个数字(即"A1“"A2”等。

当我使用这段代码进行排序时,我最终得到的是按字典顺序排序的表。"A1“、"A10”、"A11“、"A12”、"A2“、"A3”等)

代码语言:javascript
复制
let sortDescriptor = NSSortDescriptor(key: "id", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]

我真正想要的是按数字排序,就像你可能期望的那样。我该怎么做呢?我知道可以将NSComparator作为参数添加到NSSortDescriptor中,但我无法在我的一生中弄清楚它。提前感谢您的帮助!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-05-31 07:16:55

(基于SQLite的) Core数据获取请求中的排序描述符不能使用自定义比较器,而只能使用有限的“内置”比较方法。获取谓词和排序描述符在“核心数据编程指南”中记录了这一点:

..。另一方面,SQL存储将谓词和排序描述符编译为SQL,并计算数据库本身中的结果。这主要是为了性能,但这意味着评估发生在非Cocoa环境中,因此依赖Cocoa的排序描述符(或谓词)无法工作。支持的排序选择器是compare:caseInsensitiveCompare:localizedCompare:localizedCaseInsensitiveCompare:localizedStandardCompare: (后者是类似Finder的排序,以及大多数人大多数时间应该使用的)。此外,不能使用SQLite存储对瞬态属性进行排序。

幸运的是,有一个应该适合你的需求:

代码语言:javascript
复制
let sortDescriptor = NSSortDescriptor(key: "id", ascending: true,
                       selector: "localizedStandardCompare:")

localizedStandardCompare:进行“查找类”比较,特别是根据数字值处理字符串中的数字。

对于SWIFT2.2/Xcode 7.3及更高版本:

代码语言:javascript
复制
let sortDescriptor = NSSortDescriptor(key: "id", ascending: true
                         selector: #selector(NSString.localizedStandardCompare))
票数 24
EN

Stack Overflow用户

发布于 2019-03-29 22:36:01

为“迅速”4.2

可以使用NSSortDescriptor对数组进行排序

代码语言:javascript
复制
let descriptor: NSSortDescriptor = NSSortDescriptor(key: "lastMessageDate", ascending: false)
let sortedResults = arrChatDialogs?.sortedArray(using: [descriptor])
票数 2
EN

Stack Overflow用户

发布于 2015-05-31 04:37:01

迅捷的方式:

代码语言:javascript
复制
var arr = ["A1", "A10", "A11", "A12", "A2", "A3"]
arr.sort {dropFirst($0).toInt() < dropFirst($1).toInt()}

所以你可以直接使用它,或者用它作为比较器块的基础。如果您坚持在有效的目标C中这样做,您可以使用NSString compare:options:,其中options:包含NSNumericSearch

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30553843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档