2010-08-19 7 views
0

Je viens de commencer il y a deux semaines avec ObjectiveC et je suis un noob complet alors, allez-y doucement sur moi. Je veux charger un tableView avec les éléments suivants:Trier UItableView par date conditionnelle

Événements à venir
.event4 xx/xx/2010
.event5 xx/xx/2010
Événements Passe
.event1 xx/xx/2008
.event4 xx/xx/2008
.event5 xx/xx/2008

J'utilise Core Data avec un fetchedResul tsCOntroller. Quelle est la meilleure façon d'accomplir cela?

Cordialement
Ricardo Castro

Répondre

1

Réglez le sortDescriptors sur le NSFetchRequest que vous donnez à la NSFetchedResultsController. Si vous avez un champ appelé date sur votre NSManagedObject, vous pouvez créer un descripteur de tri sur cette clé. Pour séparer en sections, vous devez ajouter une méthode sur votre objet qui renvoie "Événements à venir" ou "Événements passés", puis utilisez le nom de cette méthode comme sectionNameKeyPath pour NSFetchedResultsController.

Il est important que le tri que vous mettez dans les descripteurs de tri corresponde à la manière dont les objets sont divisés en sections. c'est à dire. Vous ne voulez pas qu'un événement passé soit trié avant un événement à venir, mais pour votre cas, cela ne devrait pas être trop difficile. :)

+0

HKS Andrew! c'était plus facile que je ne le pensais. – ricastro

1

thks Andrew! c'était plus facile que je ne le pensais. voici la solution.

 
@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 

et je l'ai utilisé sectionNameGen dans le sectionNameKeyPath