核心数据按CaseInsensitiveCompare排序多个排序描述符

时间:2013-01-29 03:27:12

标签: ios5 core-data nsfetchedresultscontroller nssortdescriptor

我有一个Word:NSManagedObject子类,我试图按照单词的第一个字母进行分组。在每个部分中,我然后尝试按长度属性排序,同时在单词具有相同长度时保持字母数字排序。所以它看起来像是

一句话

  • apple Length = 5
  • ax长度= 3
  • am Length = 2

B字

  • bane长度= 4
  • 船长= 4
  • bag length = 3

所以我首先初始化一个新的NSFetchRequest。然后我添加我的排序描述符,首先按值(只是单词)排序,然后按长度排序。最后初始化我的fetchedResultsController并使用组值按第一个字母对它们进行分组。 这是我的代码,但我没有得到理想的结果。任何帮助将不胜感激。

@interface Word : NSManagedObject

@property (nonatomic, retain) NSString * value;
@property (nonatomic, retain) NSString * group;
@property (nonatomic, retain) NSNumber * length;

@end

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Word"];
request.sortDescriptors = [NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"value" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)],
                               [NSSortDescriptor sortDescriptorWithKey:@"length" ascending:NO], nil];

self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                        managedObjectContext:self.wordDatabase.managedObjectContext
                                                                          sectionNameKeyPath:@"group"
                                                                                   cacheName:nil];

1 个答案:

答案 0 :(得分:22)

第一个排序描述符应该是用作sectionNameKeyPath的密钥,密钥length的第二个排序描述符和value的最后一个排序描述符:

request.sortDescriptors = [NSArray arrayWithObjects:
    [NSSortDescriptor sortDescriptorWithKey:@"group" ascending:YES],
    [NSSortDescriptor sortDescriptorWithKey:@"length" ascending:NO],
    [NSSortDescriptor sortDescriptorWithKey:@"value" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)],
    nil];