Сортировка определенных разделов в Базовых данных - PullRequest
2 голосов
/ 19 декабря 2011

Я использую NSFetchedResultsController для заполнения tableView моего приложения, оно группируется по разделам (в этом случае свойство категории в моем основном объекте данных) Я хочу изменить порядок разделов вручную, а не в алфавитном порядке.

ниже код того, что я сделал до сих пор

- (NSFetchedResultsController *)fetchedResultsController {

if (_fetchedResultsController != nil) {
    return _fetchedResultsController;
}

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription 
                               entityForName:@"Media" inManagedObjectContext:_context];
[fetchRequest setEntity:entity];

NSSortDescriptor *sort = [[NSSortDescriptor alloc] 
                          initWithKey:@"category" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];

[fetchRequest setFetchBatchSize:20];

NSFetchedResultsController *theFetchedResultsController = 
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                                    managedObjectContext:_context sectionNameKeyPath:@"category" 
                                               cacheName:@"Root"];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;

return _fetchedResultsController;    

}

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 20 декабря 2011

Вы можете добавить новый объект с именем MediaCategory с помощью:

  • атрибута name
  • атрибута rank
  • a ко многимотношение media к сущности Media

и замените атрибут category отношением к MediaCategory.

Затем можно отсортировать результат запроса с помощьюследующие дескрипторы сортировки:

fetchRequest.sortDescriptors =
[NSArray arrayWithObjects:
 [[NSSortDescriptor alloc] initWithKey:@"category.rank" ascending:NO],
 [[NSSortDescriptor alloc] initWithKey:@"category.name" ascending:NO], // required only if many categories have the same rank
 nil];

и предоставляют @"category.name" в качестве контроллера результата sectionNameKeyPath.

2 голосов
/ 19 декабря 2011

Если задача состоит в том, чтобы предоставить пользовательский порядок секций, то вы можете создать подкласс NSFetchedResultsController и реализовать

- (NSInteger)sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)sectionIndex;

и, если необходимо,

@property (nonatomic, readonly) NSArray *sectionIndexTitles;
- (NSString *)sectionIndexTitleForSectionName:(NSString *)sectionName;
...