使用 NSFetchedResultsController 问题批量插入

Bulk insert with NSFetchedResultsController issue

我有一个表视图控制器。我正在使用 NSFetchedResultsControllercoredata 填充表视图数据。此本​​地数据库数据来自具有多个插槽的服务器,每个 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;
}

有什么建议吗?

I thought about NSFetchedResultsChangeInsert with indexpath but inserting 30 item again and again is not a good approach I think.

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

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

如果您已经以这种方式设置了后台线程,这不是很复杂(即,您可以调用 save after 处理您的循环收到的物品)。否则,您必须权衡通过增加复杂性获得的收益。