我的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];
}
答案 0 :(得分:0)
如果我正确理解了您的代码,则在将它们保存到CoreData之前创建部分名称。您正在以"EEEE MMMM d, yyyy"
格式创建部分名称,其中包含当天的名称作为第一项。对这些数据进行排序真正为您提供星期一在星期六之前的排序(M <&lt; S),因为它将按字母顺序排序。尝试将您的日期信息存储在另一个中,只能通过直接日期信息(如"yyyy-MM-dd"
)轻松排序。因此,代码将日期排在第一年,第二个月和第二天作为第三个参数。
在UITableView中为标题创建文本时,您现在可以按照您希望的其他方式格式化日期信息(使用NSDateFormatter
首先创建NSDate对象而不是您请求的文本格式。)
注意:这是一个&#34;我不能100%确定它会起作用&#34;回答,但我会这样做。