如何使用NSFetchedResultsController在日期之后生成节

时间:2011-10-23 15:44:05

标签: objective-c ios nsfetchedresultscontroller

我将展示一个托管对象列表,其中每个托管对象都有一个timeStamp属性。我想使用timeStamp属性按时间顺序对列表进行排序,我使用的是NSSortDescriptor。但我也希望根据整个日期(每天一个部分)生成部分

以下将给出一个基于第二个差异的部分,其中有太多部分:

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"timeStamp" cacheName:@"PatientDetailViewCache"];

有没有办法使用格式化为yy-MM-dd的NSFetchedResultsController从timeStamp属性生成部分?

感谢您的帮助

基督教

1 个答案:

答案 0 :(得分:2)

最简单的方法是在子类NSManagedObject上为格式化日期创建属性并使用该属性进行排序。有很多关于SO的问题有类似的问题。

Setting UITableView headers from NSFetchedResultsController

A NSFetchedResultsController with date as sectionNameKeyPath

但是在awakeFromFetch:中创建一个类宽的NSDateFormater,如下所示:

-(void)awakeFromFetch{
    dateFormater = [[NSDateFormatter alloc] init];
    [dateFormater setDateFormat:@"yy-MM-dd"];
    [super awakeFromFetch];
}

然后在该类属性的访问器中执行以下操作:

-(NSString*)myprop{
    if(myprop==nil){
        myprop = [dateFormat stringFromDate:self.OTHERDATE];
    }
    return myprop;
}

然后你的获取结果控制器是:

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"myprop" cacheName:@"PatientDetailViewCache"];

然后它将返回格式化的日期并根据它进行排序。