iOS – 基于date范围的UITableView部分

我有一个问题,我想知道是否有可能解决。 我有一个使用核心数据和NSFetchedResultsController的UITableView。 我的应用程序的一大部分是基于date组织的东西。 理想情况下,我想将TableView分成基于3个date范围的部分。 这些范围将在现在至2天之间,2天至6天之间,以及10天及以后。 用户有一个UIDatePicker,当他们input一个date时,它将被自动放入这些有组织的部分之一。 现在我知道如何轻松地将tableview分成每个date的部分,而不是如何做,所以每个部分都有一个时间范围。 感谢任何可能帮助你的人。

只是自己做了这个。 最终的结果是核心数据对象被分成几个部分,每个部分都有1天的宽度。 多个对象可能在一个部分。

//at a point where you define your fetched results controller //add @"sectionTitle" as sectionNameKeyPath: //... NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:@"sectionTitle" cacheName:@"CacheName"]; //.... - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { NSString* dateString = [[[self.sleepQualityController sections] objectAtIndex:section] name]; return dateString; } //add this to your managed object's header file: @property(nonatomic,assign)NSString* sectionTitle; //this goes into your managed object's implementation file -(NSDate *)dateWithOutTime:(NSDate *)datDate { if( datDate == nil ) { datDate = [NSDate date]; } NSDateComponents* comps = [[NSCalendar currentCalendar] components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:datDate]; return [[NSCalendar currentCalendar] dateFromComponents:comps]; } -(NSString*)sectionTitle { NSDateFormatter* dateFormaterWeekdayMonthDay = [[NSDateFormatter alloc] init]; dateFormaterWeekdayMonthDay.dateStyle = NSDateFormatterLongStyle; return [NSString stringWithFormat:@"%@", [dateFormaterWeekdayMonthDay stringFromDate:[self dateWithOutTime:self.date]] ]; } 

我将探讨在获取请求中使用NSExpressions。 在使用类似SQL的expression式和获取请求方面很难find很好的文档; 但你也可以编写你自己的查询块使用,这是非常凶手。

基本上你想要的是一个NSExpression,它返回一个string的部分名称,你可以告诉NSFetchedResultsController用于部分名称的关键path。 您需要在expression式周围build立一个NSExpressionDescription,将其添加到获取请求中。

我希望这能把你放在正确的方向!

FWIW,我通常倾向于做SQL-ish解决scheme(本质上select一个比较date字段并select三个值中的一个的'case'expression式),但是有时使用Core Data,只需拔出大锤(或者说,感觉就像他们希望我们做的那样)。