2010-06-14 18 views
8

Pracuję nad aplikacją na iPhone'a z CoreData. Jedna z moich jednostek ma własność NSDate o nazwie "time". Przechowuje czasy do minuty/sekundy. W mojej sekcji chciałbym mieć datę na dzień. Jeśli więc istnieją wpisy "2010-06-14 8:00" i "2010-06-14 11:00", chciałbym, aby były one zgrupowane w "2010-06-14".iPhone CoreData: jak grupować pobrane wyniki według dnia?

Obecnie wystarczy użyć @ „czas” jako mój sectionNameKeyPath:

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

Czy istnieje trik do grupy przez czas do dnia? Czy muszę używać zwykłego SQL i coś w stylu "GROUP BY date(time, '%Y-%m-%d')"?

Odpowiedz

15

rozwiązać go w ten sposób:

Dodane metody - (NSString *)day; do mojej klasy Entity z implementacji takich jak to:

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

    return [dateFormatter stringFromDate:self.time]; 
} 

Następnie użyłem @"day" jak sectionNameKeyPath w inicjalizacji aFetchedResultsController zamiast @"time" (patrz wyżej).

+1

Zastanawiasz się: dlaczego nie zwrócić ciągu znaków z 'self.time.components.day'? –

+1

Nie zastępuje również nadpisanego programu pobierającego, gdy ponownie generujesz podklasę 'NSManagedObject' dla twojego obiektu? –

+1

@Matt zazwyczaj taka metoda będzie znajdować się w kategorii podmiotu, aby uniknąć tego problemu. – brodney

Powiązane problemy