Мне было интересно, знает ли кто-нибудь лучшее решение для определения пользовательского порядка отображения для разделов в UITableView - я загружаю данные, используя Core Data и NSFetchedResultsControler, и я успешно использую NSSortDescriptors, а также успешно группирую возвращаемые элементы.в разделы, используя sectionNameKeyPath:
Пока все хорошо, НО - разделы перечислены в алфавитном порядке, и я хотел бы переопределить это и упорядочить разделы в определенном пользовательском порядке сортировки.
Например,если бы у меня был объект с именем Item с атрибутом color, и я использовал этот атрибут цвета в качестве sectionNameKeyPath: как бы я тогда упорядочил разделы особым образом - в настоящее время разделы отображаются как
синий, зеленый, индиго, Оранжевый, Красный, Фиолетовый, Желтый.
- , потому что у них есть NSortDescriptor, примененный к NSFetchedResultsController (который я определил).НО, как я мог бы переупорядочить эти разделы особым образом, чтобы отобразить разделы следующим образом -
Красный, Оранжевый, Желтый, Зеленый, Синий, Индиго, Фиолетовый.
Мой код NSFetchedResultsControllerследует -
- (NSFetchedResultsController *)fetchedResultsController {
if (fetchedResultsController_ != nil) {
return fetchedResultsController_;
}
/*
Set up the fetched results controller.
*/
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
// Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:20];
// Edit the sort key as appropriate.
NSSortDescriptor *colourDescriptor = [[NSSortDescriptor alloc] initWithKey:@"colour" ascending:YES];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:colourDescriptor, sortDescriptor, nil];
[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:@"colour" cacheName:@"Root"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor release];
[colourDescriptor release];
[sortDescriptors release];
NSError *error = nil;
if (![fetchedResultsController_ performFetch:&error]) {
/*
Replace this implementation with code to handle the error appropriately.
abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. If it is not possible to recover from the error, display an alert panel that instructs the user to quit the application by pressing the Home button.
*/
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return fetchedResultsController_;
}
Я понимаю опубликованные примеры использования пользовательского подкласса NSManagedObject и метода получения для динамического назначения свойства, которое будет использоваться в качестве sectionNameKeyPath: но примеры для них по-прежнему, как правило, предоставляют имена разделовкоторые затем перечислены в алфавитном порядке.
Я, конечно, новичок в этом, но любые предложения / указания будут с благодарностью.