Seb*_*ian 12 core-data nsfetchedresultscontroller ios
我有一个NSManagedObject用于分组UITableView中的部分.该对象具有"name"和"createdAt"属性.我想在te UI中使用"name"作为节标题,但是按"createdAt"排序.根据文档,第一个sortDescriptor键也必须是NSFetchedResultsController的sectionNameKeyPath.
我建议使用两个sortDescriptors,但它不起作用.这些部分仍按名称排序.
- (NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Object" inManagedObjectContext:[CoreDataHelper instance].managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortName = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSSortDescriptor *sortDate = [[NSSortDescriptor alloc] initWithKey:@"createdAt" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sortName, sortDate, nil]];
[fetchRequest setFetchBatchSize:20];
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:[CoreDataHelper instance].managedObjectContext sectionNameKeyPath:@"name"
cacheName:@"Root"];
self.fetchedResultsController = theFetchedResultsController;
return _fetchedResultsController;
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*n R 38
获取结果控制器(FRC)仅使用第一个排序描述符将对象分组(并排序)为多个部分.可以添加第二个排序描述符来对每个部分中的对象进行排序.
此外,排序描述符的关键路径必须sectionNameKeyPath
与FRC 的关键路径相同(或至少生成相同的相对排序).
在您的情况下,您可以按以下步骤操作:
createdAt
as sectionNameKeyPath
和.修改titleForHeaderInSection
委托函数以返回name
属性而不是createdAt
:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.controller sections] objectAtIndex:section];
return [[[sectionInfo objects] objectAtIndex:0] name];
}
Run Code Online (Sandbox Code Playgroud)注意:如果您有多个具有相同name
但不同createAt
值的对象,则使用上述方法将这些对象分组到不同的部分.我不知道这对你来说是否有问题.
归档时间: |
|
查看次数: |
7748 次 |
最近记录: |