2010-06-14 13 views
8

Sto sviluppando un'applicazione per iPhone con CoreData. Una delle mie entità ha una proprietà NSDate denominata 'ora'. Memorizza i tempi al minuto/secondo. Come le mie sezioni mi piacerebbe avere la data del giorno. Pertanto, se ci sono le voci "2010-06-14 8:00" e "2010-06-14 11:00", mi piacerebbe che fossero raggruppate in "2010-06-14".iPhone CoreData: come raggruppare i risultati recuperati di giorno?

Attualmente mi basta usare @ "tempo" come il mio sectionNameKeyPath:

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

C'è un trucco per gruppo da parte del tempo per il giorno? O devo usare SQL semplice e qualcosa come "GROUP BY date(time, '%Y-%m-%d')"?

risposta

15

risolto in questo modo:

metodo Aggiunto - (NSString *)day; alla mia classe di entità con un'implementazione del genere:

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

    return [dateFormatter stringFromDate:self.time]; 
} 

Poi ho usato @"day" come sectionNameKeyPath nella inizializzazione del aFetchedResultsController invece di @"time" (vedi sopra).

+1

Basta chiedersi: perché non restituire una stringa con 'self.time.components.day'? –

+1

Inoltre, il getter sottoposto a override non scompare quando si genera nuovamente la sottoclasse 'NSManagedObject' per la propria entità? –

+1

@Matt in genere un metodo come questo sarà in una categoria dell'entità, per evitare questo problema. – brodney

Problemi correlati