2011-03-07 36 views
1

很抱歉,如果这是一个新手的问​​题。我试图围绕核心数据包围我的头。iOS COreData中允许使用多个NSFetchedResults控制器?

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

我的问题是NSFetchedResultsController需要居住在哪里?每个导航控制器都可以有自己NSFetchedResultsController并进行提取以自己独特的方式还是我必须把FRC在应用程序的委托,使这两个选项卡可以访问它?我知道上下文是在应用程序委托中,所以我认为这也是这种情况。谢谢你的帮助。

回答

0

从NSFetchedResultsController到应用程序委托或特定视图控制器没有直接关系。

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

在我工作过的应用程序中,我倾向于发现每个VC有一个FRC是最常见的。

1

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

你不会遇到不止一个NSFRController问题,至少,如果他们生活在自己的viewController,你当然应该不一样的tableView从两个不同的NSFRC代表改变。

我通常在viewWillDisappear方法中禁用(即self.frc = nil)NSFetchedResultsController。
恕我直言没有必要更新5个UITableViews如果只有一个是可见的。

编辑:思考一点点关于它后,我得出的结论是,从每一个用户切换标签的时间分配一个新的FRC对性能的影响比更新5个tableviews更大。无论如何,我从来没有检查过tableViews是否更新了它们的单元格。

+0

我会释放(并设置为零)的NSFRC在viewDidUnload。这只有在VC不可见时才会被调用(并且内存变得稀缺),并且允许在viewControllers之间切换时更快地显示数据。否则,您还需要重新载入tableView以确保对上下文所做的任何更改都可见。 – FelixLam 2011-03-07 20:59:11

+0

你是对的。可能是一个好主意,像你说的那样改变它。我将为我的应用提交增强请求。谢谢。 – 2011-03-07 21:13:01

0

NSFetchedResultsController专门设计用于将数据从核心数据提供给UITableViews。因此,每个tableview应该在tableview的控制器中拥有自己的控制器。

相关问题