我正在使用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;
}
提前致谢!
答案 0 :(得分:2)
如果任务是提供部分的自定义顺序,那么你可以继承子类NSFetchedResultsController并实现
- (NSInteger)sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)sectionIndex;
,如果需要,
@property (nonatomic, readonly) NSArray *sectionIndexTitles;
- (NSString *)sectionIndexTitleForSectionName:(NSString *)sectionName;
答案 1 :(得分:2)
您可以添加名为MediaCategory
的新实体:
name
rank
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
。