У меня есть небольшая проблема с сортировкой моего NSFetchedResultsController
.CoreData NSFetchedResultsController Сортировка
My NSManagedObject
имеет два атрибута. date
и startTime
.
date
это время 00:00:00 на все мои объектах, таким образом, при использовании date
как sectionNameKeyPath
она захватывает все объекты с одинаковыми датами (днем) в одной секции. Если время дат было иным, оно помещало бы каждый объект в другой раздел.
Это хорошо работает, но затем внутри каждой группы я хочу сортировать объекты по startTime
. Таким образом, они представляют собой список с самого раннего момента на этом date
до последнего в каждом разделе соответственно.
Моя проблема заключается в использовании date
как sectionNameKeyPath
и startTime
как NSSortDescriptor` ему не нравится и играет странно. Например, только иногда показывающие определенные данные в том, что кажется нерегулярным.
Я думаю, что это сводится к тому, чтобы иметь дескриптор сортировки и sectionNameKeyPath
то же самое. Я прав, думая об этом? Если нет, как мне настроить мой NSFetchedResultsController
, чтобы перечислить мои данные в упомянутой моде?
Спасибо.
EDIT: вот код. Также стоит отметить, что при использовании startTime
в качестве моего второго дескриптора сортировки он вызывает отображение дубликатов в моем представлении таблицы с объектами nil.
NSFetchedResultsController
:
NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"startTime" ascending:YES];
NSArray *sortDescriptors = @[sortDescriptor1, sortDescriptor2];
[fetchRequest setSortDescriptors:sortDescriptors];
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"date" cacheName:@"Master"];
cellForRowAtIndexPath
только отрывок, показывающий, как я обозначаю каждый управляемый объект:
id <NSFetchedResultsSectionInfo> sectionInfo = [self.flightFetchedResultsController.sections objectAtIndex:indexPath.section];
NSArray *sectionFlights = [sectionInfo objects];
Flight *flight = [sectionFlights objectAtIndex:indexPath.row];
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return self.flightFetchedResultsController.sections.count;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.flightFetchedResultsController sections] objectAtIndex:section];
return [sectionInfo numberOfObjects];
}
Показать код. Является ли 'startTime' строкой? (введите дату). – Wain
Это уже дата, код входящий ... –
Вы неправильно получаете объекты. Я уточню свой ответ. – Fogmeister