在排序的核心数据获取结果中排序?

时间:2011-04-10 03:12:20

标签: iphone sorting core-data

所以我有以下代码,用“color”属性对核心数据进行排序。

sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"color" ascending:YES];
sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];

有没有办法获取该类型的结果,现在按日期(另一个属性)在每个颜色“组”中进行子排序?

基本上这是我现在得到的一个例子......

RED - 11/1/2010
RED - 9/8/2010
RED - 11/9/2011
RED - 10/20/2011
GREEN - 11/1/2010
GREEN - 9/8/2010
GREEN - 11/9/2011
BLUE - 10/20/2011
BLUE - 11/1/2010
BLUE - 9/8/2010

以下是我希望结果看起来......

RED - 9/8/2010
RED - 11/1/2010
RED - 10/20/2011
RED - 11/9/2011
GREEN - 9/8/2010
GREEN - 11/1/2010
GREEN - 11/9/2011
BLUE - 9/8/2010
BLUE - 11/1/2010
BLUE - 10/20/2011

我确信这可以做到,但我不确定如何实现。

1 个答案:

答案 0 :(得分:10)

调用SetSortDescriptors时,请传递要排序的所有NSSortDescriptors的数组。在您的示例中,您只创建了一个排序描述符,并且只将其添加到排序描述符数组中。为日期字段创建第二个NSSortDescriptor,并将其添加到排序描述符数组中。它们按照数组中的顺序应用于数据集。请参阅下面的Apple文档说明。

这样的事情应该有效:

NSSortDescriptor *colorSort = [[NSSortDescriptor alloc] initWithKey:@"color" ascending:asc selector:nil];
NSSortDescriptor *dateSort = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:asc selector:nil];
NSArray *sortDescriptors = [NSArray arrayWithObjects:colorSort, dateSort, nil];
[fetchRequest setSortDescriptors:sortDescriptors];

请参阅以下链接: https://developer.apple.com/library/ios/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSFetchRequest_Class/NSFetchRequest.html

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSSortDescriptor_Class/Reference/Reference.html

设置接收器的排序描述符数组。 - (void)setSortDescriptors:(NSArray *)sortDescriptors

sortDescriptors - 排序描​​述符指定在发出获取请求时返回的对象应该如何排序 - 例如按姓氏,然后按名字。排序描述符按它们在sortDescriptors数组中出现的顺序应用(按最低数组索引排序顺序串行)。