我正在尝试使用NSFetchedResultsController
创建分段TableView
。我的数据模型看起来就像是:NSFetchedResultsController - 作为部分标题的父级和祖父级
市< --- >>区< --- >>街
我的TableView应该是这样的:
,------------,
| City 1 | --- Section 0
`------------´
,------------,
| District 1 | --- Section 1
`------------´
| Street 1 | --- Row 0
`------------´
| Street 2 | --- Row 1
`------------´
,------------,
| District 2 | --- Section 2
`------------´
| Street A | --- Row 0
`------------´
| Street B | --- Row 1
`------------´
,------------,
| City 2 | --- Section 3
`------------´
的问题是,如果我在我的FetchedResultsController
上定义一个sectionNameKeyPath,我只会得到地区名称或城市名称,但不能同时包含这两个名称。 这甚至可能吗?
这是我FetchedResultsController
至今:
- (NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResults != nil) {
return _fetchedResults;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Street" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"toDistrict.toCity.toUser.userId = %@",currentUser.userId];
NSSortDescriptor *sortCities = [[NSSortDescriptor alloc] initWithKey:@"toDistrict.toCity.name" ascending:YES];
NSSortDescriptor *sortDistricts = [[NSSortDescriptor alloc] initWithKey:@"toDistrict.name" ascending:YES];
NSSortDescriptor *sortStreets = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sortCities, sortDistricts, sortStreets, nil]];
[fetchRequest setFetchBatchSize:20];
[fetchRequest setPredicate:predicate];
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"toDistrict.toCity.name" cacheName:@"Root"];
self.fetchedResults = theFetchedResultsController;
fetchedResults.delegate = self;
return _fetchedResults;
}
我需要做什么才能实现的TableView上述外观的改变?还是我完全错了,需要一个不同的结构?
任何提示和帮助,将不胜感激。
该表视图的层次结构很难理解。你在上面画的第0节分组第1节和第2节?这对于UITableView来说是不可能的。你只能有2个级别;部分标题和部分标题的行。你需要添加一些巫术来实现你的愿望,但我不会推荐它。 – Schoob