NSSortDescriptor 从 Swift 4 的核心数据中获取密钥

Posted

技术标签:

【中文标题】NSSortDescriptor 从 Swift 4 的核心数据中获取密钥【英文标题】:NSSortDescriptor get key from core data in Swift 4 【发布时间】:2018-01-25 10:53:49 【问题描述】:

我是 IO 开发和核心数据的新手。

在我的应用程序中,我想使用 NSSortDescriptor 对数据进行排序,然后再将其提取到我的 tableview 中。

在我的核心数据中,我有一个表“TBL_Products”,其中包含两个字段“product_name”和“Quantity”

下面的代码运行良好

let MySortDescriptor = NSSortDescriptor(key: "product_name" , ascending: true)

但我讨厌它是我对键名进行硬编码,因此如果更改列名,应用程序将崩溃。

有没有办法解决这样的事情(下面的代码不起作用):

let MySortDescriptor = NSSortDescriptor(key: TBL_Products.product_name.descriptor , ascending: true)

【问题讨论】:

【参考方案1】:

使用可以使用#keyPath指令:

NSSortDescriptor(key: #keyPath(TBL_Products.product_name), ascending: true)

编译器将其替换为包含属性名称的字符串。 它在 Core Data 谓词中也很有用,例如

NSPredicate(format: "%K == %@", #keyPath(TBL_Products.product_name), "someProduct")

【讨论】:

【参考方案2】:

请注意,在 Swift 5 中,这已更新为使用 \. 语法而不是 #keypath 指令:

NSSortDescriptor(key: \TBL_Products.product_name, ascending: true)

【讨论】:

以上是关于NSSortDescriptor 从 Swift 4 的核心数据中获取密钥的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4.2 中的 NSSortDescriptor 区分大小写

Swift CoreData:使用 NSSortDescriptor 计算即将到来的生日排序

Swift:按排序描述符对数组进行排序

CoreData NSPredicate

NSSortDescriptor 对核心数据获取请求没有影响

在托管对象上下文中添加 NSSortDescriptor 以获取请求?