iOS COre Data中允许多个NSFetchedResultsController?

时间:2011-03-07 20:37:47

标签: iphone core-data

很抱歉,如果这是一个新手问题。我试图围绕核心数据。

我有一个标签栏应用程序,其中每个标签包含一个导航控制器。每个导航控制器的顶层是一个表,显示同一组数据的特定和不同视图,该视图位于Core Data存储中。这有点像iTunes,其中一个Tab显示由Artist组织的歌曲,另一个显示按标题组织的歌曲。

我的问题是NSFetchedResultsController需要在哪里生活?每个导航控制器都可以拥有自己的NSFetchedResultsController,并以自己独特的方式执行提取,还是必须将FRC放在应用程序委托中,以便两个选项卡都可以访问它?我知道上下文是在app代理中,所以我认为这也是必须的。谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

为什么多个NSFetchedResultsController出现问题?它们只是获取数据并监视上下文以进行更改。

您不会遇到多个NSFRController的问题,至少如果它们存在于自己的viewController中,当然您不应该从两个不同的NSFRC委托更改相同的tableView。

我通常在viewWillDisappear方法中禁用(即self.frc = nil)NSFetchedResultsController。
Imho没有必要更新五个UITableViews,如果只有一个可见。

编辑:在仔细考虑之后,我得出结论,每次用户切换标签时分配新FRC的性能影响大于更新5个表格视图。我从未检查过tableViews是否在它们不可见时更新它们的单元格。

答案 1 :(得分:0)

NSFetchedResultsController与app委托和特定视图控制器之间没有直接关系。

通常,您将拥有与数据集对应的FRC。如果同一数据集适用于您应用中的每个VC,则可以使FRC可用于应用范围。如果您有许多与特定VC密切相关的不同数据集,则可以将它们作为该VC的成员变量。

在我所使用的应用程序中,我倾向于发现每个VC最常见的一个FRC。

答案 2 :(得分:0)

NSFetchedResultsController专门用于从Core Data向UITableViews提供数据。因此,每个tableview应该在tableview的控制器中有自己的控制器。