需要按日期对标题标题进行排序

时间:2014-07-03 12:16:43

标签: ios uitableview nsdate

我的UITableView中的每个节标题都是日期。我可以很好地设置标题,但标题按字母顺序排序,而不是按日期排序。因此,星期一高于星期六,星期六高于星期三。有没有办法按时间顺序按日期排序标题?

以下是我用来设置节标题的代码,其中entry.sectionName(type = string)是我的模型实体中的属性,也用作我的sectionNameKeyPath。

//set sectionName
NSDate *headerDate = [NSDate date];
NSDateFormatter *headerDateFormatter = [[NSDateFormatter alloc] init];
[headerDateFormatter setDateFormat:@"EEEE MMMM d, yyyy"];
NSString *headerDateString = [headerDateFormatter stringFromDate:headerDate];
entry.sectionName = headerDateString;

我假设sectionName属性需要是Date而不是String?这是正确的,如果是这样,代码看起来是什么样的?我使用下面的代码将其更改回NSDate,但它似乎无法正常工作或显示任何数据。

//set sectionName
NSDate *headerDate = [NSDate date];
NSDateFormatter *headerDateFormatter = [[NSDateFormatter alloc] init];
[headerDateFormatter setDateFormat:@"EEEE MMMM d, yyyy"];
NSString *headerDateString = [headerDateFormatter stringFromDate:headerDate];

NSDateFormatter *inFormat = [[NSDateFormatter alloc] init];
[inFormat setDateFormat:@"MMM dd, yyyy"];

NSDate *parsed = [inFormat dateFromString:headerDateString];

entry.sectionName = parsed;

以下是获取结果控制器

-(NSFetchRequest *)entryListFetchRequest{
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"BreastEntry"];
[fetchRequest setSortDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"sectionName" ascending:YES],
                                   [NSSortDescriptor sortDescriptorWithKey:@"timePicker" ascending:NO]]];


return fetchRequest;
}



-(NSFetchedResultsController *)fetchedResultsController{
if(_fetchedResultsController != nil){
    return _fetchedResultsController;
}

CoreDataStack *coreDataStack =[CoreDataStack defaultStack];
NSFetchRequest *fetchRequest = [self entryListFetchRequest];

_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:coreDataStack.managedObjectContext sectionNameKeyPath:@"sectionName" cacheName:nil];
_fetchedResultsController.delegate = self;

return _fetchedResultsController;

}

titleForSectionInHeader方法

-(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{

id<NSFetchedResultsSectionInfo> sectionInfo = [self.fetchedResultsController sections][section];
return [sectionInfo name];

}

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的代码,则在将它们保存到CoreData之前创建部分名称。您正在以"EEEE MMMM d, yyyy"格式创建部分名称,其中包含当天的名称作为第一项。对这些数据进行排序真正为您提供星期一在星期六之前的排序(M <&lt; S),因为它将按字母顺序排序。尝试将您的日期信息存储在另一个中,只能通过直接日期信息(如"yyyy-MM-dd")轻松排序。因此,代码将日期排在第一年,第二个月和第二天作为第三个参数。

在UITableView中为标题创建文本时,您现在可以按照您希望的其他方式格式化日期信息(使用NSDateFormatter首先创建NSDate对象而不是您请求的文本格式。)

注意:这是一个&#34;我不能100%确定它会起作用&#34;回答,但我会这样做。