对获取的结果控制器进行排序,最后为空字符串

时间:2017-04-18 03:56:04

标签: objective-c sorting core-data nsfetchedresultscontroller nssortdescriptor

假设我在Core Data商店中有一个Person实体。我有UITableView填充NSFetchedResultsController,显示每个Person实体。当然,Person实体具有name属性,这是可选的。我们想按字母顺序显示列表,A-Z。看到这个的用户首先要看看指定的人,因为他们会更关心他们。因此,控制器在其初始化程序中采用的排序描述符必须首先显示具有非空名称的Person实体,然后显示空名称。

我的选择有限。我只允许使用NSString在点击数据库时提供的某些比较器,这些比较器都不符合我的标准。我无法对瞬态值进行排序。我已经尝试使用零宽度空格作为默认值,但Core Data显然修剪了空白。想法?

1 个答案:

答案 0 :(得分:1)

fetchedResultsController中的部分不需要与您在tableview中显示的部分一一对应。现在你有类似(null),A,B,C,D等的部分。但您可以更改视图控制器选择显示部分的方式。在tableview中设置第0部分,查看fetchedResultsController中的第1部分和1-> 2,2-> 3 ...直到最后一部分(无名称部分)指向第0部分。

这并不复杂,但它可能会给代码带来麻烦。所以我建议创建一个单独的对象来处理将fetchedResultsController indexPaths和sections转换为tableview的indexPaths和sections。 (还要确保处理没有“无名称”部分的情况,并且当只有“无名称”部分时)。

如果这看起来太复杂,那么更简单的解决方案是添加hasName的属性并按此排序。为该人名创建一个自定义设置器,该设置器还将设置hasName属性,以便您可以轻松地保持此属性同步。