使用 FetchedResultsController 显示“过去”和“即将到来”部分 UITableView

Posted

技术标签:

【中文标题】使用 FetchedResultsController 显示“过去”和“即将到来”部分 UITableView【英文标题】:Showing "past" and "upcoming" sections UITableView with FetchedResultsController 【发布时间】:2011-12-04 05:49:01 【问题描述】:

我在按过去和未来对表格视图进行分组时遇到了一些困难。这将由我的核心数据模型中的日期字段确定。因此,所有日期>今天的项目都将是即将到来的,所有日期

【问题讨论】:

【参考方案1】:

你可以在你的实体类中使用这个函数:

-(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;

它会返回

    如果事件在未来,则字符串中的日期 如果事件是今天,则为“今天”。 如果活动将在 30 分钟后开始,则为“即将开始” - (您可以根据需要调整范围。 如果事件在过去,则为“过去”。

然后只需将“dateToStringForSectionTitels”传递给您的获取结果控制器。

祝你好运。

【讨论】:

以上是关于使用 FetchedResultsController 显示“过去”和“即将到来”部分 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份