iPhone CoreData: как сгруппировать полученные результаты по дням? - PullRequest
8 голосов
/ 14 июня 2010

Я разрабатываю приложение для iPhone с CoreData.У одной из моих сущностей есть свойство NSDate с именем time.Он хранит время до минуты / секунды.В качестве моих разделов я хотел бы иметь дату на день.Поэтому, если есть записи «2010-06-14 8:00» и «2010-06-14 11:00», я бы хотел, чтобы они были сгруппированы в «2010-06-14».

В настоящее время я просто использую @ "time" в качестве моего sectionNameKeyPath:

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

Есть ли уловка для группировки по времени на день?Или я должен использовать простой SQL и что-то вроде "GROUP BY date(time, '%Y-%m-%d')"?

1 Ответ

15 голосов
/ 31 октября 2010

Решил это так:

Добавлен метод - (NSString *)day; в мой класс Entity с такой реализацией:

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

    return [dateFormatter stringFromDate:self.time];
}

Затем я использовал @"day" как sectionNameKeyPath при инициализации aFetchedResultsController вместо @"time" (см. Выше).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...