NSFetchedResultsController - sectionNameForKeypath如何获取其数据?

时间:2011-03-20 21:42:57

标签: ios core-data nsfetchedresultscontroller nsmanagedobject

我一直在用NSFetchedResultsController做几个噩梦,并试图找到我的问题概述here的解决方案,我遇到了一些关于fetchedResultsController提取的数据的异常,特别是{{1}参数。

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

商品<< - >的类别

Category有一个名为sectionNameForKeypath的(NSNumber *)属性,用于将获取的 Item 实例分隔为表视图中的部分:

displayOrder

如果我想以某种方式动态操纵NSFetchedResultsController *controller = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:moc sectionNameKeyPath:@"category.displayOrder" cacheName:nil]; 的输出,那么显而易见的选择是覆盖其getter方法并在那里做任何我想做的事情。但问题是,displayOrder的getter永远不会在fetchRequest或fetchedResultsController期间被访问,即使我在displayOrder中指定它,我可以看到fetchedResultsController正在使用它的值分开并显示部分。

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

sectionNameForKeypath

我也尝试覆盖-(NSNumber*)displayOrder { NSLog (@"displayOrder getter called"); NSNumber *displayOrder = [NSNumber numberWithInt:0]; return displayOrder; } 无效(也没有被调用,但这并不让我感到惊讶,因为我正在获取Item实例并通过关系访问类别及其属性)

所以最后我的问题是:awakeFromFetch值是如何传递给我的fetchedResultsController的,有没有办法控制这个输出?

提前感谢您提出的任何想法!

罗格

1 个答案:

答案 0 :(得分:1)

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