我应该在每个视图中都有NSFetchedResultsController吗?

时间:2010-02-07 23:31:11

标签: iphone cocoa-touch core-data

我在我的第一个iPhone应用程序中使用Core Data并尝试了解NSFetchedResultsController。它在我的根视图中工作得很好。我是否需要在每个视图控制器中实例化一个实例?如果是这样,是否有一个模板可以使它像我的根控制器一样简单(我在创建项目时只是在模板中选中了一个框)。当我添加一个新的视图控制器时,我没有看到使用Core Data的选项。

更新:即使我将代码剪切/粘贴到第二个视图中,我花了一些时间才意识到我还需要在切换到新视图之前设置managedObjectContext。在推送导航堆栈上的新视图之前,我将以下行添加到RootViewController中:

self.newVC.managedObjectContext = self.managedObjectContext;

2 个答案:

答案 0 :(得分:11)

如果您的其他观点可视化不同的实体,那么是的,您将使用不同的NSFetchedResultsController。您可以基本上从其他视图控制器的自动生成的根视图控制器中复制并粘贴代码...只需更改实体名称。

但是,如果您的层次结构中的其他(表)视图仅显示同一实体的不同属性,则将现有NSFetchedResultsController对象传递到层次结构中会更有效/更简单。只需在类接口中创建一个NSFetchedResultsController成员,并将其作为视图控制器的.h文件中的属性公开,然后合成该属性并将其释放到.m文件中。然后在将视图控制器推入堆栈之前设置属性。

答案 1 :(得分:3)

我想补充一点,如果您使用多个NSFetchedResultsControllers用于同一个实体,但在不同的表中,如果您使用同一实体插入数据,则您的UITableView将不会更新另一个控制器。这是因为您的UITableView不会从NSFetchedResultsController接收到您没有将自己设置为委托的willChangeContent等消息。