对获取的结果控制器进行排序,最后是空字符串
Posted
技术标签:
【中文标题】对获取的结果控制器进行排序,最后是空字符串【英文标题】:Sorting a fetched results controller, empty strings last 【发布时间】:2017-04-18 03:56:03 【问题描述】:假设我在 Core Data 存储中有一个 Person
实体。我有一个由 NSFetchedResultsController
填充的 UITableView
,它显示了每个 Person
实体。当然,Person
实体有一个name
属性,这是可选的。我们想按字母顺序显示列表,A-Z。看到此内容的用户希望首先查看已命名的人,因为他们会更关心这些人。因此,控制器在其初始化程序中采用的排序描述符必须首先显示具有非空名称的Person
实体,然后是空名称。
我的选择是有限的。在访问数据库时,我只被允许使用NSString
上提供的某些比较器,这些比较器都不符合我的标准。我无法对瞬态值进行排序。我尝试使用零宽度空白作为默认值,但 Core Data 显然将空白修剪掉了。想法?
【问题讨论】:
【参考方案1】:fetchedResultsController 中的部分不需要与您在 tableview 中显示的部分一一对应。现在你有类似(null),A,B,C,D,......等的部分。但是您可以更改视图控制器选择显示这些部分的方式。在您的表格视图中设置第 0 部分查看 fetchedResultsController 中的第 1 部分和 1->2、2->3...直到最后一个部分(无名称部分)指向第 0 部分。
这并不复杂,但它会给您的代码添加混乱。所以我建议创建一个单独的对象来处理将 fetchedResultsController indexPaths 和 section 转换为 tableview 的 indexPaths 和 section。 (还要确保处理没有“no name”部分的情况,以及只有“no name”部分的情况)。
如果这看起来太复杂,一个更简单的解决方案是添加hasName
的属性并首先按该属性排序。为该人的姓名创建一个自定义设置器,该设置器还将设置 hasName
属性,以便您可以轻松地保持此属性同步。
【讨论】:
我只在一个部分中显示名称,但hasName
的建议听起来可行。以上是关于对获取的结果控制器进行排序,最后是空字符串的主要内容,如果未能解决你的问题,请参考以下文章