【问题标题】:How can I change section ordering with NSFetchedResultsController?如何使用 NSFetchedResultsController 更改部分排序?
【发布时间】:2013-07-16 13:25:24
【问题描述】:

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

[sortDescriptors addObject:[NSSortDescriptor sortDescriptorWithKey:@"color" ascending:YES]];

我将 NSFetchedResultsController 的 sectionNameKeyPath 设置为“颜色”属性。

正如我所料,结果会根据颜色分成几部分。

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

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

 ""
 "green"
 "red"
 "yellow"

但我希望这些部分按顺序排列:

 "green"
 "red"
 "yellow"
 ""

有没有办法编写排序描述符来获得这种行为?我自己也想不出任何办法。

【问题讨论】:

    标签: core-data nsfetchedresultscontroller nsfetchrequest nssortdescriptor


    【解决方案1】:

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

    【讨论】:

    • 并且该附加属性可能是 BOOL“hasValidColor”,它在设置颜色属性的覆盖设置器中更改。然后,您将按“hasValidColor”和“color”排序。
    • @MatthiasBauch:我不确定您是否可以为sectionNameKeyPath 使用两个 排序描述符。文档说sectionNameKeyPath 必须生成与 first 排序描述符相同的排序。因此,我想到了一个属性“xcolor”,如果“color”为空,则它是一些“大字符串”,否则等于“color”。
    • 你当然是对的。我完全忘记了切片。
    • 一些额外的想法。
    • 1.是否可以对同一属性进行两个级别的排序?类似于:。 这需要稳定的排序,我不确定 Core Data 是否保证。而且它需要能够为 color != "" 编写一个谓词,我还没有弄清楚。
    猜你喜欢
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2010-12-15
    • 2021-03-05
    相关资源
    最近更新 更多