解决新旧API有效负载之间差距的好模式是什么(在iOS时间线表视图中)?

解决新旧API有效负载之间差距的好模式是什么(在iOS时间线表视图中)?,ios,pagination,nsfetchedresultscontroller,Ios,Pagination,Nsfetchedresultscontroller,这个问题可能不适合这个网站喜欢的具体答案,而且可能有点偏离了用户体验领域,但我还没有找到更好的空间来提出此类问题并获得合理数量的关注。归根结底,这是一个好的iOS编程模式来处理这种情况 在构建iOS应用程序时,我经常需要创建一个类似Twitter或Facebook的feed界面,或者需要显示大量(可能)不断更新的项目。NSFetchedResultsController自然非常适合这种情况,但我遇到了解决以前加载(通常是持久化)的旧(过时)数据与来自API的新数据之间差距的问题。我想让用户在加载

这个问题可能不适合这个网站喜欢的具体答案,而且可能有点偏离了用户体验领域,但我还没有找到更好的空间来提出此类问题并获得合理数量的关注。归根结底,这是一个好的iOS编程模式来处理这种情况

在构建iOS应用程序时,我经常需要创建一个类似Twitter或Facebook的feed界面,或者需要显示大量(可能)不断更新的项目。NSFetchedResultsController自然非常适合这种情况,但我遇到了解决以前加载(通常是持久化)的旧(过时)数据与来自API的新数据之间差距的问题。我想让用户在加载新数据的同时立即访问以前加载的数据,然后处理中间任何数据的分页

我为做这类事情的好模式而挣扎。我所看到的一些更好的实现是在Twitter上针对iPhone和Tweetbot的。下面是一个来自无限加载的示例:

这个问题会到处出现。Twitter或Facebook这样的时间线是显而易见的,但它也可能出现,例如,当显示用户的好友/连接或其他一些大型数据列表时。以前,您可能已经获取了很多结果(在我的例子中,通常是核心数据),您可以立即显示这些结果。同时,您希望提供新的数据。在很多情况下,您都希望对这些数据进行分页,而不仅仅是一次性获得所有数据

那么什么是正确的方法呢?我能想到的解决时间线场景的最佳方法,可能是更常见的场景

基本上,我的方法是立即显示旧数据,然后从时间轴请求最新的数据,并始终将我拥有的最高(最新)ID传递给API。这可能会根据分页量在新数据和旧数据之间产生间隙,因此,一旦滚动到新数据页中的最后一个单元格(或者理想情况下,新数据和旧数据之间的某个加载指示器),您就可以请求下一批数据,或者请求下一页,或者传递低ID和高ID(来自装载行周围的项目)

从技术上讲,这种方法很麻烦,特别是如果您想使用NSFetchedResultsController,因为您现在必须为加载栏的位置保留索引,并将NSFRC内外的任何索引路径映射到加载单元格周围


如果你没有一个API可以接受高ID和低ID,而只是使用页面,那么这也意味着大量的网络数据,因为你最终只能通过现有的持久化数据进行分页。那么有没有更好的模式呢?我知道同步数据是一个深入、永无止境的领域,但我希望听到其他人是否有不同的模式terns.

有什么新的想法来解决这个问题吗?有一段时间没有这样做了,但除了我描述的解决方案之外,我没有发现任何“明显”的模式。