fetchedResultsController对象获取的数量和频率

时间:2013-09-20 22:33:02

标签: ios tableview fetch

我正在使用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的问题。重新加载表只重新加载视图中的行,然后在滚动时更新其他行吗?我再次问,因为如果我的数据非常大,如果它将立即重新加载所有行,则重新加载整个表似乎效率低。

1 个答案:

答案 0 :(得分:0)

  1. 是的,如果您添加delegate

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


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