用于“懒惰地”获取REST数据的模式

时间:2014-02-18 11:55:39

标签: ios objective-c design-patterns

我正在创建一个内容无限的UIScrollView,例如包含事件的日历。我正在使用REST调用从后端获取事件。

我想知道是否有人有一个模式/大块的代码限制:

  • 何时获取更多数据 以及

  • 获取更多内容

很容易调整。

例如,我想尝试抓取事件30天(15前锋和15后退),当用户向前滚动10天(距离限制5天)时,我想再提前30天,这意味着我现在有60天了。

由于

2 个答案:

答案 0 :(得分:1)

使用滚动视图(无论是UIScrollView还是UITableView,这可以帮助您进行内存管理 - 卸载不可见的内容),您可以使用scrollViewDidScroll:委托方法和contentOffset属性,用于检查用户/已滚动到的位置以及它是否接近您当前拥有的数据的末尾。您使用的算法取决于滚动视图中每个项目/日的高度。结合contentOffset,您可以告诉用户滚动到哪一天。

答案 1 :(得分:0)

我自己制作了一个简单的方法。

我的模型中有一个带有日期,numberOfDaysToFetch和限制的void方法。 numberOfDaysToFetch可以是90,限制可以是30。

当滚动视图滚动浏览视图(每个视图代表一天)时,我会调用每天可见的方法。

如果当天的数据不存在于本地,或者当天的数据接近于限制(30),而不是本地存在的数据,则该方法将调用服务来获取数据(异步),例如从最新的日期和numberOfDaysToFetch转发。

这意味着该方法将首先获得6个月的数据。 3个前锋和3个后退。向前滚动2个月时,将获取3个月的数据。

每当从服务收到响应时,收到的数据都会存储在本地,并且会抛出通知,并且会调用方法来更新滚动视图中的视图。

我现在可以将限制和numberOfDays调整到最符合网络服务性能的范围。