NSFetchedResultsController有0个部分

gsk*_*yte 5 core-data objective-c nsfetchedresultscontroller

我遇到了一个问题,我不知道它来自哪里,与CoreData相关.在我的数据库中,a有一组类别(带名称和描述),其中包含元素(使用一对多关系).

我想在给定Category类的属性的部分中划分我的表视图,但是当我尝试使用时sectionNameKeyPath:,结果NSFetchedResultsController有0个部分.如果我将nil传递给此参数,则它有1个部分.

代码如下:

- (NSFetchedResultsController*) fetchedResultsController
{
    if(fetchedResultsController)
        return fetchedResultsController;

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    // Edit the entity name as appropriate.
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Category"
                                              inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entity];

    // Set the batch size to a suitable number.
    [fetchRequest setFetchBatchSize:10];

    // Edit the sort key as appropriate.

    NSSortDescriptor *checkDescriptor = [[NSSortDescriptor alloc] initWithKey:@"checked"
                                                                   ascending:YES];
    NSSortDescriptor *indexDescriptor = [[NSSortDescriptor alloc] initWithKey:@"orderIndex"
                                                                   ascending:YES];
    NSArray *sortDescriptors = @[checkDescriptor, indexDescriptor];

    [fetchRequest setSortDescriptors:sortDescriptors];

    // Edit the section name key path and cache name if appropriate.
    // nil for section name key path means "no sections".
    fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                                                   managedObjectContext:self.managedObjectContext
                                                                     sectionNameKeyPath:@"checked"
                                                                              cacheName:nil];

    NSError *error = nil;
    if (![fetchedResultsController performFetch:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
        return nil;
    } else {
        fetchedResultsController.delegate = self;
        return fetchedResultsController;
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*n R 1

请参阅NSFetchedResultsController文档:(在您的情况下为“name”)使用的键sectionNameKeyPath必须与第一个排序描述符(在您的情况下为“checked”)中使用的键相同。它们可以不同,但​​两个键必须生成相同的相对顺序。

在你的情况下,我假设你想在“name”上添加一个额外的排序描述符,并将其用作第一个排序描述符。