ios - NSFetchedResultsController -sectionNameForKeypath 如何获取其数据?

标签 ios core-data nsfetchedresultscontroller nsmanagedobject

我一直在使用 NSFetchedResultsController 做一些噩梦,并试图找到解决我的问题的解决方案 here ,我发现 fetchedResultsController 获取的数据有些不寻常,特别是 sectionNameForKeypath 参数。

假设我有一个包含 2 个实体和关系的对象模型,如下所示:

项目 <<--> 类别

Category 有一个名为 displayOrder 的 (NSNumber*) 属性,用于将获取的 Item 实例分成表格 View 中的部分:

NSFetchedResultsController *controller = [[NSFetchedResultsController alloc]
                                          initWithFetchRequest:fetchRequest
                                          managedObjectContext:moc
                                          sectionNameKeyPath:@"category.displayOrder"
                                          cacheName:nil];

如果我想以某种方式动态地操纵 displayOrder 的输出,显而易见的选择是覆盖它的 getter 方法并在那里做我想做的任何事情。但问题是,即使我在 sectionNameForKeypath 中指定了 displayOrder 的 getter,在 fetchRequest 期间或 fetchedResultsController 也根本不会访问它,而且我可以看到fetchedResultsController 使用它的值来分隔和显示各个部分。

这是一个被覆盖的 getter 方法的简单示例,该方法永远不会被调用。这被放置在我的 Category 类中:

-(NSNumber*)displayOrder
{
    NSLog (@"displayOrder getter called");
    NSNumber *displayOrder = [NSNumber numberWithInt:0];
    return displayOrder;
}

我还尝试覆盖 awakeFromFetch 无济于事(也没有被调用,但这并不令我感到惊讶,因为我正在获取 Item 实例并通过访问类别及其属性关系)。

最后我的问题是:category.displayOrder 值如何传递到我的 fetchedResultsController,有没有办法让我控制这个输出?

预先感谢您的任何想法!

罗格

最佳答案

自 iOS 3.2 起,NSFetchedResultsController 尽可能直接从数据库使用由sectionNameKeyPath 标识的字段,而不是为每个项目创建对象。您可以尝试对sectionNameKeyPath使用非持久属性,这(根据文档)将强制它创建对象,但如果只是重命名UITableView的部分,那么最好在中进行映射tableView:titleForHeaderInSection:.

关于ios - NSFetchedResultsController -sectionNameForKeypath 如何获取其数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5371713/

相关文章:

ios - 使用 Alamofire 的 API 调用有时会返回连接失败错误

ios - NSPredicate 获取给定值下属性的最大值

ios - 在没有 Xcode 数据设计器的情况下使用核心数据迁移

ios - 为什么 NSFetchedResultsController 没有检索到我的多对多关系?

ios - 如何使用Objective-C更改多种UIButton颜色

ios - Objective-C - 在 View Controller 关闭时在 UIAlertView 中提示的位置

ios - 搜索 CoreData 以匹配 NSDate - Swift

ios - NSFetchedResultsController 仅在 Controller 即将插入另一个部分时将相同的单元格插入两个部分

ios - 推送后保存 objectAtIndex 时 NSFetchedResultsController 崩溃

ios - Firebase 既不给出回调也不给出错误