使用NSFetchedResultsController问题批量插入

时间:2015-12-03 16:26:15

标签: uitableview core-data nsfetchedresultscontroller

我有一个tableview控制器。我使用coredataNSFetchedResultsController填充tableview数据。这个本地数据库数据来自具有多个插槽的服务器,每个api调用带来新的30个项目。

我第一次从服务器api获取30项并存储在核心数据中,然后像往常一样使用NSFetchedResultsController显示它。现在,如果我到达最后一个项目(第30项),那么我将从服务器中提取下一个插槽(next 30 item)并存储在同一个数据库中。

现在我如何reload NSFetchedResultsController以便它将加载接下来的30个项目。

我考虑NSFetchedResultsChangeInsertindexpath,但我一再插入30项并不是一个好方法。

case NSFetchedResultsChangeInsert: {
    [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
    break;
}

有任何建议如何做到这一点?

1 个答案:

答案 0 :(得分:2)

  

我想到了带有索引路径的NSFetchedResultsChangeInsert,但是我想一次又一次插入30个项目。

这是一个很好的方法。数据在可用时尽早显示。插件是受控的,线程安全的和动画的。

一种替代方法是延迟保存在其插入的后台上下文中的托管对象,并且仅在处理了一定数量的记录后保存。然后保存将更改推送到主线程上下文(假设背景上下文设置为其子项),这反过来将通知NSFetchedResultsControllerDelegate更新一个动画中的UI 。

如果您已经以这种方式设置后台线程,这不是很复杂(即,在处理接收到的对象的循环之后,您将调用save 。否则,你必须通过增加复杂性来衡量你获得多少。