索引NSFetchedResultsController

tof*_*ier 4 core-data uitableview nsfetchedresultscontroller ios

如何索引a NSFetchedResultsController以便我可以在tableview上实现AZ索引.

我在初始化程序中看到我能做到,sectionNameKeyPath但这只是在自己的部分中放置了唯一的对象.

这就是我对我的看法 NSFetchedResultsController

    - (NSFetchedResultsController *)fetchedResultsController
{
    if (__fetchedResultsController != nil) {
        return __fetchedResultsController;
    }

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Customer" inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entity];

    [fetchRequest setFetchBatchSize:20];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
    NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];

    [fetchRequest setSortDescriptors:sortDescriptors];

    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"name" cacheName:@"Customer"];
    aFetchedResultsController.delegate = self;

    self.fetchedResultsController = aFetchedResultsController;

    return __fetchedResultsController;
}  
Run Code Online (Sandbox Code Playgroud)

Mat*_*uch 13

这样实现sectionIndexTitlesForTableView::

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
    return [self.fetchedResultsController sectionIndexTitles];
}
Run Code Online (Sandbox Code Playgroud)

这将为您提供tableView右侧的那些索引.

如果您希望您的部分具有A,B,C,D等名称,则必须实现一个返回对象的第一个字母的方法.

这样的事情:

- (NSString *)firstLetter {
    [self willAccessValueForKey:@"firstLetter"];
    NSString *firstLetter = [[[self name] substringToIndex:1] uppercaseString];
    [self didAccessValueForKey:@"firstLetter"];
    return firstLetter;
}
Run Code Online (Sandbox Code Playgroud)

这将进入您的coredata实体的自定义子类.

然后添加一个名为firstLetter您的核心数据实体的瞬态属性,并替换NSFetchedResultsController init中的sectionNameKeyPathfirstLetter