1

我正在使用 FetchedResultsController 为我的 UITableView 获取数据。数据是通过在另一个选项卡上执行的操作创建的(因此我的表可能有 5 个项目,但如果我切换选项卡并返回我的表,它可能有超过 5 个应该显示的项目)。我的表可能包含许多行。现在我在 viewDidLoad 中使用 [myFetchedResultsController performFetch]。看来,当我在另一个选项卡中创建数据时,当我切换回我的表选项卡时,新数据会自动放入我的表中,而无需我执行 [myFetchedResultsController performFetch]再次。以下是我的问题:

1) fetchedResultsController 是否会自动监视 manajedObjectContext 的更改并在新对象存在时获取它们?(这似乎是正在发生的事情,但我只是想确定一下。也许我有一些代码可以帮助我做到这一点,但我忘记了我放在某个地方)

2) [myFetchedResultsController performFetch] 执行的提取是在当时提取所有对象,还是只提取它可以放入表视图中的内容,然后在需要时提取其余部分(当您滚动时桌子)?我问是因为因为我的表可能有很多行,如果一次只在表上显示约 12 个数据,一次获取所有数据似乎效率低下。

编辑:我刚刚意识到在我的 FetchedResultsController 委托方法中,我有 - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { [self.tableView reloadData]; }

我是否正确地说 fetchedResultsController 监视更改,但除非像我所做的那样重新加载表,否则不会将其应用于表?如果是这样,那么我还有一个关于 UITableView 的问题。重新加载表是否只重新加载视图中的行,然后在滚动时更新其他行?我再次问,因为如果我的数据非常大,如果它一次重新加载所有行,重新加载整个表似乎效率低下。

4

1 回答 1

0
  1. 是的,如果您添加一个delegate

  2. 您应该在配置 FRC 时设置获取请求批量大小,因为如果您告诉它有多少,它只能为屏幕加载适当数量的项目。


您应用更改,FRC 只是收集和提供数据。委托方法会告诉您有关更改的信息。重新加载会在行数方面影响整个表,但仅显示可见行(假设批量大小设置正确)。

于 2013-09-20T23:17:48.310 回答