2010-06-14 8 views
8

Estoy desarrollando una aplicación para iPhone con CoreData. Una de mis entidades tiene una propiedad NSDate llamada 'tiempo'. Almacena tiempos al minuto/segundo. Como mis secciones me gustaría tener la fecha del día. Entonces, si hay entradas '2010-06-14 8:00' y '2010-06-14 11:00', me gustaría que se agrupen en '2010-06-14'.iPhone CoreData: ¿cómo agrupar los resultados obtenidos por día?

Actualmente sólo tiene que utilizar @ "tiempo" como mi sectionNameKeyPath:

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

¿Hay un truco para agrupar por el tiempo para el día? ¿O tengo que usar SQL simple y algo así como "GROUP BY date(time, '%Y-%m-%d')"?

Respuesta

15

lo resolvió de esta manera:

método Agregado - (NSString *)day; a mi clase de entidad con una aplicación como esta:

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

    return [dateFormatter stringFromDate:self.time]; 
} 

Luego usé @"day" como sectionNameKeyPath en la inicialización de aFetchedResultsController en lugar de @"time" (véase más arriba)

+1

Solo me pregunto: ¿por qué no devolver una cadena con 'self.time.components.day'? –

+1

También, ¿no desaparece el getter anulado al volver a generar la subclase 'NSManagedObject' para su entidad? –

+1

@Matt normalmente un método como este estará en una categoría de la entidad, para evitar ese problema. – brodney

Cuestiones relacionadas