使用FetchedResultsController显示“过去”和“即将推出”部分UITableView

时间:2011-12-04 05:49:02

标签: ios cocoa-touch uitableview core-data

我在过去和即将到来时将表格视图分组有点困难。这将由我的Core Data模型中的日期字段确定。所以所有项目的日期都是>今天即将到来,所有日期都是<今天将被视为过去。任何有关这方面的见解将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以在实体类中使用此功能:

-(NSString*)dateToStringForSectionTitels{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSString *formattedDateString;
[dateFormatter locale];

NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *components = [cal components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:[NSDate date]];
NSDate *today = [cal dateFromComponents:components];
components = [cal components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:self.startDate];
NSDate *otherDate = [cal dateFromComponents:components];

if([today isEqualToDate:otherDate]) {
    formattedDateString = @"Today";
}else{
    [dateFormatter setDateStyle:NSDateFormatterShortStyle];
    formattedDateString = [dateFormatter stringFromDate:self.startDate];
}

NSTimeInterval distanceBetweenDates = [self.startDate timeIntervalSinceDate:[NSDate date]];
double secondsInAnMinute = 60;
NSInteger minutsBetweenDates = distanceBetweenDates / secondsInAnMinute;

if (minutsBetweenDates<30) {
   formattedDateString = @"Starting Soon";
}else if(minutsBetweenDates<0){
   formattedDateString = @"In the past"; 
}


return formattedDateString;

}

它会返回

  1. 如果事件是将来的话,字符串中的日期
  2. “今天”如果活动是今天。
  3. 如果活动在30分钟内开始,“即将开始” - (您可以根据自己的意愿将其调整范围。
  4. “过去”如果事件是过去的话。
  5. 然后将“dateToStringForSectionTitels”传递给你的获取结果控制器。

    祝你好运。