В настоящее время я работаю над приложением, которое имеет несколько сущностей и отношений, как показано ниже:
Элемент << -> Категория .
В настоящее время я извлекаю Item экземпляров и отображаю их в разделах, используя элемент category.name
. В этом случае я могу использовать дескриптор сортировки для сортировки категорий по имени, что довольно просто и работает нормально (соответствующий код ниже):
-(NSFetchedResultsController*)fetchedResultsController {
if (fetchedResultsController_ != nil)
return fetchedResultsController_;
NSManagedObjectContext *moc = [order_ managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:moc];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"category.name" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];
NSFetchedResultsController *controller = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:moc
sectionNameKeyPath:@"category.name"
cacheName:nil];
controller.delegate = self;
self.fetchedResultsController = controller;
[controller release];
[fetchRequest release];
NSError *error = nil;
if (![fetchedResultsController_ performFetch:&error]) {
// Error handling
}
return fetchedResultsController_;
}
Моя проблема сейчас в том, что мне нужно отсортировать эти категории не по имени, а по атрибуту (NSNumber*) displayOrder
, который является частью сущности Category . НО Мне нужно, чтобы заголовки разделов в табличном представлении продолжали использовать категории name
.
Если я установлю sortDescriptor для использования category.displayOrder
и оставлю sectionNameKeyPath равным category.name
, заголовки разделов будут работать нормально, но fetDescriptor просто игнорируется fetchedResultsController, а разделы таблицы упорядочиваются по имени категории (не знаю, почему ??).
Моя следующая идея состояла в том, чтобы переписать метод получения displayOrder
, но это не сильно меня задело, так как типы возвращаемых данных разные, плюс мне нужно было фактическое значение displayOrder для сортировки разделов.
Так что сейчас у меня есть решение, которое кажется немного неуклюжим (код ниже), и мне интересно, есть ли лучший способ добиться того же, используя только fetchedResultsController.
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
// The code below grabs a reference to first object for a given section
// and uses it to return the associated category name
{
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
NSArray *menuItems = [sectionInfo objects];
if ([menuItems count] > 0)
{
MenuItem *menuItem = [menuItems objectAtIndex:0];
NSString *categoryName = menuItem.category.name;
return categoryName;
}
return [sectionInfo name];
}
Я что-то упустил здесь?
Заранее спасибо за ваши мысли.
1037 * Рог *