2010-06-14 7 views
8

Je développe une application iPhone avec CoreData. Une de mes entités a une propriété NSDate nommée 'time'. Il stocke les temps à la minute/seconde. Comme mes sections j'aimerais avoir la date à jour. Donc, s'il y a des entrées '2010-06-14 8:00' et '2010-06-14 11:00', j'aimerais qu'elles soient regroupées en '2010-06-14'.iPhone CoreData: Comment regrouper les résultats récupérés par jour?

Actuellement je viens d'utiliser @ « temps » comme mon sectionNameKeyPath:

NSFetchedResultsController *aFetchedResultsController = 
    [[NSFetchedResultsController alloc] 
    initWithFetchRequest:fetchRequest 
    managedObjectContext:managedObjectContext 
    sectionNameKeyPath:@"time" 
    cacheName:@"Root"]; 

Y at-il une astuce pour le groupe au moment de la journée? Ou dois-je utiliser SQL et quelque chose comme "GROUP BY date(time, '%Y-%m-%d')"?

Répondre

15

a résolu le problème de cette façon:

méthode Ajouté - (NSString *)day; à ma classe d'entités avec une mise en œuvre comme ceci:

- (NSString *)day { 
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    dateFormatter.dateStyle = NSDateFormatterFullStyle; 

    return [dateFormatter stringFromDate:self.time]; 
} 

Puis je @"day" comme sectionNameKeyPath dans l'initialisation de aFetchedResultsController au lieu de @"time" (voir ci-dessus).

+1

Je me demandais juste: pourquoi ne pas retourner une chaîne avec 'self.time.components.day'? –

+1

Le getter substitué ne disparaît pas non plus lorsque vous générez de nouveau la sous-classe 'NSManagedObject' pour votre entité? –

+1

@Matt typiquement une méthode comme celle-ci sera dans une catégorie de l'entité, pour éviter ce problème. – brodney

Questions connexes