【问题标题】:iOS NSFetchedResultsController: sort sections by >=2 propertiesiOS NSFetchedResultsController:按> = 2个属性对部分进行排序
【发布时间】:2013-01-16 17:37:56
【问题描述】:

我使用 NSFetchedResultsController 通过 Core Data 从数据库中获取数据。我有一个实体,它有 2 个属性,即 NSString 的 prop1 和 prop2。
我如何不仅按属性之一对部分进行排序,而且按两个属性对部分进行排序?
现在是:

Title1ForProp1/Title2ForProp2 (prop1==1 prop2==2)
Title1ForProp1/Title1ForProp2 (prop1==1 prop2==1)
Title2ForProp1/Title1ForProp2 (prop1==2 prop2==1)

我需要:

Title1ForProp1/Title1ForProp2 (prop1==1 prop2==1)
Title1ForProp1/Title2ForProp2 (prop1==1 prop2==2)
Title2ForProp1/Title1ForProp2 (prop1==2 prop2==1)

【问题讨论】:

    标签: ios sorting nsfetchedresultscontroller


    【解决方案1】:

    当您为 NSFC 创建获取请求时,您会创建排序描述符并为请求提供一个数组。

    您可以在数组中放置任意数量的排序描述符。

    只需为要排序的每个字段创建一个排序描述符。

    不过,我记得您必须将它们放入数组中的顺序。

    好的,所以代码明智...

    NSSortDescriptor *sd1 = [[NSSortDescriptor alloc] initWithKey:@"prop1" ascending:YES];
    NSSortDescriptor *sd2 = [[NSSortDescriptor alloc] initWithKey:@"prop2" ascending:YES];
    
    [fetchRequest setSortDescriptors:@[sd1, sd2]];
    

    这就是你所要做的。

    如果你给它一个 sectionNameKeyPath,NSFC 只会将它们分成几个部分。如果您不想要任何部分,则将 sectionNameKeyPath 设为 nil。

    【讨论】:

    • 请参阅reference。 “如果控制器生成部分,则数组中的第一个排序描述符用于将对象分组为部分;”。但我需要按 2 个属性对其进行排序,也许存在解决方法。
    • 添加了你需要做的代码。你没有给出任何关于你在做什么或你尝试过的实际细节,但把它放在那里(至少试试我说错之前所说的)。这应该符合您的要求。
    • 我已经创建了简化的示例,并使用您建议的代码运行它,它可以工作!我在当前项目中发现了一个错误,看起来第二个属性被忽略了。但是为什么苹果说只有第一个描述符用于分组呢?
    • 我认为您误解了他们的意思。如果您设置了 sectionNameKeyPath,那么第一个排序描述符将按该属性对它们进行分组。无论如何,这就是它正在做的事情,但是使用 sectionNameKeyPath 它将分组分成不同的部分。你仍然有分组但没有分成几个部分。
    【解决方案2】:

    Fogmeister 的排序描述符数组是合适的(先在 prop1 上排序,然后在 prop2 上排序),但如果您在 sectionNameKeyPath 中提供 prop1,则您的部分将仅由 prop1 分解。在每个部分中,项目将按 prop1 和 prop2 排序。

    如果这不是您想要的,并且您需要另外将结果按 prop1 和 prop2 分组,您可能希望创建一个连接 prop1 和 prop2 的瞬态属性,并将该瞬态属性提供为您的 sectionNameKeyPath .这不仅提供了部分的标题,还确定了结果如何分组到部分中。

    查看这个问题,了解如何为部分名称创建临时属性: NSFetchedResultsController with sections created by first letter of a string

    【讨论】:

      猜你喜欢
      • 2021-03-05
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      相关资源
      最近更新 更多