由多个关系创建的访问器方法是否与NSFetchedResultsControllers一样好?

时间:2012-01-26 17:12:56

标签: ios uitableview core-data nsfetchedresultscontroller

我的问题与此类似:

ResultsController to another ResultsController

ios上的典型应用程序结构是通过表视图深入查看数据,并且大量应用程序模型是分层的。例如,电影节可以有很多电影,可以有很多电影,可以有很多参加者。如果我们使用核心数据来表示此模型,那么我们可以使用NSFetchedResultsController将电影填充到UITableView。使用NSFetchedResultsController极大地提高了性能和内存效率,并为观察底层数据的更改提供了内置支持。我想在我的项目中尽可能地利用这一点。

因此,如果我们有一个由这个甜蜜NSFetchedResultsController支持的电影表,并且用户选择电影来查看其放映列表,我们可以传递该电影(NSManagedObject的子类)到一个新的UITableViewController并用电影的放映填充该表。

我的问题的核心不是“我该怎么做?”相反,它会询问NSFetchedResultsController的好处是否与NSManagedObject一起传播。我可以使用谓词中的事件构建一个新的结果控制器,但我不需要。如果我将Film对象传递给名为film的变量,并且我的多对多关系被标识为screenings,那么我相信我可以像这样获得与该电影相关的一组放映:

NSSet *filmScreenings = [film screenings];

如果我将该集合转换为数组,并将其用作支持我的新表格筛选的数据,我是否会失去NSFetchedResultsController的好处?我的直觉告诉我是的,尤其是对监控变化的支持 - 但Apple的文档中的常见问题解答让我第二次猜测并向整个社区提问。查看问题in this FAQ,名为“我有从实体A到实体B的多对多关系......”

那么我应该使用那种访问器方法,还是应该构建一个新的NSFetchedResultsController

1 个答案:

答案 0 :(得分:2)

通过执行此操作(例如批量提取和更改监控),您将失去NSFetchedResultsController的好处,因为您将使用简单的NSArray替换它。您最好的选择是将Film传递给详情控制器,并使用NSFetchedResultsController的谓词中的Film构建NSFetchRequest