【问题标题】:NSFetchedResultsController has 0 sectionsNSFetchedResultsController 有 0 个部分
【发布时间】:2012-08-23 11:42:18
【问题描述】:

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

在给定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;
    }
}

【问题讨论】:

    标签: objective-c core-data nsfetchedresultscontroller


    【解决方案1】:

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

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

    【讨论】:

    • 你有 @synthesize 你的 fetchedResultsController 吗?我遇到了类似的问题,这就是问题所在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    相关资源
    最近更新 更多