我有一个NSFetchedResultsController
,从Core Data中获取数据,是一个专辑列表。它目前按艺术家排序,所以所有A、B等艺术家在一起。我想添加索引,使用户可以快速跳转到每个字母,并使用下面的代码来实现。问题在于,现在的段标题也是"A"、"B"、"C"等,这意味着我失去了每个艺术家的按字母顺序排列的段标题(例如"Adele"、"America"、"Beatles, The"等)。
我希望索引使用字母A到Z,但段标题按字母顺序显示艺术家名称。点击索引中的字母会跳转到该字母开头的第一个艺术家。如何实现此功能(索引中的字母为字母字符,但段标题为不同的属性)?
编辑:如果我将sectionNameKeyPath
设置为author
字段,则A-Z索引可见,但字母与名称不同步,例如,如果我点击S,它会带我到以AL开头的艺术家,或者点击G会带我到AB。我不太确定为什么会这样,也许是段索引出了问题?
以下是我正在使用的代码:
在我的NSManagedObject
子类中:
- (NSString *) firstLetter
{
[self willAccessValueForKey: @"firstLetter"];
NSString *firstLetter = [[[self author] substringToIndex: 1] uppercaseString];
[self didAccessValueForKey: @"firstLetter"];
return firstLetter;
}
在我的视图控制器中,创建FRC:
NSFetchedResultsController *byAuthorFRC = [[NSFetchedResultsController alloc] initWithFetchRequest: _fetchRequest
managedObjectContext: [[CDManager sharedManager] managedObjectContext]
sectionNameKeyPath: @"firstLetter"
cacheName: nil];
下面是我的sectionIndexTitlesForTableView:
方法:
- (NSArray *) sectionIndexTitlesForTableView: (UITableView *) tableView
{
return [self.fetchedResultsController sectionIndexTitles];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
- Dan Shellyreturn [[[self.fetchedResultsController sections] objectAtIndex: section] name];
- LukefirstLetter
作为sectionNameKeyPath
使用,那么只会有26个章节标题,每个字母一个。应该有成百上千个。 - LukesectionNameKeyPath:@"author"
是可以正常工作的。你是否实现了tableView:sectionForSectionIndexTitle:atIndex:
方法? - Martin R