ios5 – 使用CaseInsensitiveCompare按多个排序描述符排序核心数据

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

一句话

>苹果长度= 5
> ax长度= 3
> am长度= 2

B字

> bane长度= 4
>船长= 4
>包长= 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];

解决方法

一个排序描述符应该是用作sectionNameKeyPath的键,第二个是键长度的排序描述符,最后一个是值:
request.sortDescriptors = [NSArray arrayWithObjects:
    [NSSortDescriptor sortDescriptorWithKey:@"group" ascending:YES],[NSSortDescriptor sortDescriptorWithKey:@"value" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)],nil];

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...