0

我使用 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)
4

2 回答 2

3

当您为 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。

于 2013-02-01T12:16:14.267 回答
1

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

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

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

于 2013-02-04T08:22:16.610 回答