Core data 如何使用NSFetchedResultsController更改节顺序?

Core data 如何使用NSFetchedResultsController更改节顺序?,core-data,nsfetchedresultscontroller,nsfetchrequest,nssortdescriptor,Core Data,Nsfetchedresultscontroller,Nsfetchrequest,Nssortdescriptor,我正在使用以下排序描述符设置NSFetchRequest: [sortDescriptors addObject:[NSSortDescriptor sortDescriptorWithKey:@"color" ascending:YES]]; 我正在将NSFetchedResultsController的sectionNameKeyPath设置为“color”属性 正如我所期望的那样,结果是根据颜色分类的 对于某些对象,“颜色”属性为空字符串“”是有效的。在第一节中,这些名称都分组在一起,因

我正在使用以下排序描述符设置NSFetchRequest:

[sortDescriptors addObject:[NSSortDescriptor sortDescriptorWithKey:@"color" ascending:YES]];
我正在将NSFetchedResultsController的sectionNameKeyPath设置为“color”属性

正如我所期望的那样,结果是根据颜色分类的

对于某些对象,“颜色”属性为空字符串“”是有效的。在第一节中,这些名称都分组在一起,因为它们排序在所有其他名称之前。但是,我希望它们显示为最终部分,而不是第一部分,而不影响其余对象的搜索顺序

例如,当前的部分可能是:

 ""
 "green"
 "red"
 "yellow"
但我希望各部分的顺序如下:

 "green"
 "red"
 "yellow"
 ""
是否有某种方法可以编写排序描述符来获得这种行为?我自己也没能想出什么办法。

用于(基于SQLite的)核心数据获取请求的排序描述符只能使用一些标准的比较器方法,并且只能使用存储在数据库中的(持久)属性。得到 如果是非标准订单,则必须向实体添加一个附加属性,并且
使用该属性进行排序。

并且该附加属性可以是BOOL“hasValidColor”,该属性在设置颜色属性的覆盖设置器中更改。然后,您将按“hasValidColor”和“color”进行排序。@MatthiasBauch:我不确定您是否可以为
部分nameKeyPath
使用两个排序描述符。文档说明
sectionNameKeyPath
必须生成与第一个排序描述符相同的排序。因此,我想到了一个属性“xcolor”,如果“color”为空,则它是一个“大字符串”,否则等于“color”。我完全忘记了分区的事。还有一些想法。是否可以对同一属性进行两级排序?类似于:。这需要稳定的排序,我不确定核心数据是否能保证这一点。它需要能够为颜色编写谓词!=“”我还没弄明白。