Core Data多属性排序问题:NSSortDescriptor多键排序无效
解决Core Data多属性排序的问题
嘿,我来帮你搞定这个排序的问题!
首先得纠正两个误区:
你不能分开两次赋值
sortDescriptors,像这样:request.sortDescriptors = [sort1] request.sortDescriptors = [sort2]第二次赋值会直接覆盖第一次的设置,最后只会生效
sort2,这可不是叠加排序哦。把两个
NSSortDescriptor放在同一个数组里赋值才是正确的多属性排序方式,你注释掉的request.sortDescriptors = [sort1, sort2]其实是对的!那为什么你觉得没生效呢?大概率是这两个原因:- 你的数据里
list_item属性的值都是唯一的:Core Data会先按sort1排序,只有当两个对象的list_item值完全相同时,才会用sort2来进一步排序。如果所有list_item都不一样,那sort2的效果根本体现不出来。你可以找几个list_item相同的测试数据试试,就能看到list_item_completed的排序效果了。 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
相关产品推荐
相关产品推荐

