使用 NSFetchedResultsController 问题批量插入
Bulk insert with NSFetchedResultsController issue
我有一个表视图控制器。我正在使用 NSFetchedResultsController
从 coredata
填充表视图数据。此本地数据库数据来自具有多个插槽的服务器,每个 api 调用带来新的 30 个项目。
我第一次从服务器 api 获取 30 个项目并存储在核心数据中,然后像往常一样使用 NSFetchedResultsController
显示它。现在,如果我到达最后一项(第 30 项),我将从服务器带来下一个插槽(next 30 item
)并存储在同一个数据库中。
现在我如何 reload
NSFetchedResultsController 以便它加载接下来的 30 个项目。
我考虑过 NSFetchedResultsChangeInsert
和 indexpath
但我认为一次又一次地插入 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 处理您的循环收到的物品)。否则,您必须权衡通过增加复杂性获得的收益。
我有一个表视图控制器。我正在使用 NSFetchedResultsController
从 coredata
填充表视图数据。此本地数据库数据来自具有多个插槽的服务器,每个 api 调用带来新的 30 个项目。
我第一次从服务器 api 获取 30 个项目并存储在核心数据中,然后像往常一样使用 NSFetchedResultsController
显示它。现在,如果我到达最后一项(第 30 项),我将从服务器带来下一个插槽(next 30 item
)并存储在同一个数据库中。
现在我如何 reload
NSFetchedResultsController 以便它加载接下来的 30 个项目。
我考虑过 NSFetchedResultsChangeInsert
和 indexpath
但我认为一次又一次地插入 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 处理您的循环收到的物品)。否则,您必须权衡通过增加复杂性获得的收益。