我有一个tableview控制器。我使用coredata
从NSFetchedResultsController
填充tableview数据。这个本地数据库数据来自具有多个插槽的服务器,每个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;
}
有任何建议如何做到这一点?
答案 0 :(得分:2)
我想到了带有索引路径的NSFetchedResultsChangeInsert,但是我想一次又一次插入30个项目。
这是一个很好的方法。数据在可用时尽早显示。插件是受控的,线程安全的和动画的。
一种替代方法是延迟保存在其插入的后台上下文中的托管对象,并且仅在处理了一定数量的记录后保存。然后保存将更改推送到主线程上下文(假设背景上下文设置为其子项),这反过来将通知NSFetchedResultsControllerDelegate
更新一个动画中的UI 。
如果您已经以这种方式设置后台线程,这不是很复杂(即,在处理接收到的对象的循环之后,您将调用save
。否则,你必须通过增加复杂性来衡量你获得多少。