按日期条件对UItableView进行排序

时间:2010-08-19 17:31:53

标签: iphone objective-c events uitableview date

我刚刚在两周前开始使用ObjectiveC而且我是一个完整的菜鸟,所以,对我来说很容易。 我想用以下内容加载tableView:

即将举行的活动
 .event4 xx / xx / 2010
 .event5 xx / xx / 2010
通过活动
 .event1 xx / xx / 2008
 .event4 xx / xx / 2008
 .event5 xx / xx / 2008

我正在使用带有fetchedResultsCntroller的Core Data。实现这一目标的最佳方法是什么?

最诚挚的问候 里卡多卡斯特罗

2 个答案:

答案 0 :(得分:1)

设置sortDescriptorsNSFetchRequest的{​​{1}}。如果您的NSFetchedResultsController上有一个名为date的字段,则可以在该密钥上创建排序描述符。

要分成多个部分,您需要在对象上添加一个返回“即将发生的事件”或“过去的事件”的方法,然后将该方法的名称用作NSManagedObject的{​​{1}} 1}}。

将排序描述符中的排序与对象拆分为多个部分的方式相匹配非常重要。即。您不希望任何过去的事件在即将发生的事件之前被排序,但对于您的情况应该不会太难。 :)

答案 1 :(得分:1)

安德鲁说!它比我想象的容易。 这是解决方案。

@implementation NSManagedObject (dateSection)
- (NSString *)sectionNameGen
{
    [self willAccessValueForKey:@"sectionNameGen"];
    NSString *sectionName =[[[NSString alloc]init]autorelease];


    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 valueForKey:@"date"]];
    NSDate *tempDate = [cal dateFromComponents:components];


        if([today isEqualToDate:tempDate])
        {
            sectionName = @"Today's Events";
        }
        else
        {
            if ([today timeIntervalSinceDate:tempDate]<0) 
            {
                sectionName = @"Upcoming Events";
            }
            else 
            {
                sectionName=@"Passed Events";
            }   
        }   

    [self didAccessValueForKey:@"sectionNameGen"];
    return sectionName;
}
@end

我在sectionNameKeyPath

中使用了sectionNameGen