You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Core Data多属性排序问题:NSSortDescriptor多键排序无效

解决Core Data多属性排序的问题

嘿,我来帮你搞定这个排序的问题!

首先得纠正两个误区:

  • 你不能分开两次赋值sortDescriptors,像这样:

    request.sortDescriptors = [sort1]
    request.sortDescriptors = [sort2]
    

    第二次赋值会直接覆盖第一次的设置,最后只会生效sort2,这可不是叠加排序哦。

  • 把两个NSSortDescriptor放在同一个数组里赋值才是正确的多属性排序方式,你注释掉的request.sortDescriptors = [sort1, sort2]其实是对的!那为什么你觉得没生效呢?大概率是这两个原因:

    1. 你的数据里list_item属性的值都是唯一的:Core Data会先按sort1排序,只有当两个对象的list_item值完全相同时,才会用sort2来进一步排序。如果所有list_item都不一样,那sort2的效果根本体现不出来。你可以找几个list_item相同的测试数据试试,就能看到list_item_completed的排序效果了。
    2. list_item_completed的属性类型和排序逻辑不匹配:比如如果它是布尔值,ascending: true会把false(未完成)排在前面,true(已完成)排在后面。如果你的数据里大部分都是同一个状态,也可能让你误以为排序没生效。

给你贴一个正确的完整代码示例:

// 初始化两个排序描述符
let sort1 = NSSortDescriptor(key: "list_item", ascending: true, selector: #selector(NSString.caseInsensitiveCompare))
let sort2 = NSSortDescriptor(key: "list_item_completed", ascending: true)

// 关键:把两个排序符放在同一个数组里赋值
request.sortDescriptors = [sort1, sort2]

这个逻辑是:先按list_item不区分大小写升序排列,当两个条目list_item相同时,再按list_item_completed的状态升序排列(未完成在前,已完成在后)。

内容的提问来源于stack exchange,提问作者Stingalingaling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:50:43