2010-08-19 85 views
0

我剛剛在兩週前開始使用ObjectiveC,我是一個完整的noob,因此,對我來說很容易。 我想加載的tableView有以下幾點:按日期排序UItableView有條件

活動預告
.event4 XX/XX/2010
.event5 XX/XX/2010
通行證活動
.event1 XX/XX/2008
.event4 XX/XX/2008
.event5 XX/XX/2008

我使用的核心數據與fetchedResul tsCOntroller。什麼是實現這一目標的最佳方式?

問候
裏卡多·卡斯特羅

回答

1

上你給NSFetchedResultsControllerNSFetchRequest設置sortDescriptors。如果您的NSManagedObject上有一個名爲date的字段,則可以在該密鑰上創建一個排序描述符。

對於要分割的部分,您需要在對象上添加一個方法,該方法返回「即將發生的事件」或「過去的事件」,然後使用該方法的名稱作爲NSFetchedResultsControllersectionNameKeyPath

重要的是,您在排序描述符中放置的排序與對象如何拆分成段相匹配。即。你不希望在即將發生的事件之前排序過去的事件,但對於你的情況應該不會太難。 :)

+0

HKS安德魯!這比我想象的容易。 – ricastro 2010-08-23 13:50:21

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 
      { 
       [email protected]"Passed Events"; 
      } 
     } 

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

,我用sectionNameGen在sectionNameKeyPath