• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 分页功能在第一次触发时获取比必要更多的数据

[复制链接]
菜鸟教程小白 发表于 2022-12-11 20:52:35 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我在一个练习应用中实现分页,基本上 scrollViewDidScroll 测量用户在页面上的位置,当他们到达底部时,我有一个 fetchMoreData 函数触发。此函数使用字符串插值从 API 中获取下一页结果。

但是我遇到了一个问题 - 当用户第一次到达页面底部时,页面会一遍又一遍地递增 - 我的打印语句显示它快速连续地进入第 2、3、4 页, 5,6等无穷无尽。

这是现在的分页代码:

func fetchMoreEvents() {
    page += 1

    let seatGeekApiUrl = URL(string: "https://api.seatgeek.com/2/events?venue.state=NY&page=\(page)&client_id=MTM5OTE0OTd8MTU0MjU2NTQ4MC4z")!

    fetchData(url: seatGeekApiUrl) { (result: FetchResult<Welcome>) -> (Void) in

        switch result {
        case .success(let object): self.eventData.append(contentsOf: object.events)
            //print("\neventData: \n\n\(self.eventData)")
        case .failure(let error):
            print("\nError decoding JSON: \n\n\(error)")
        }
        DispatchQueue.main.async {
            self.tableView.reloadData()
        }
    }

    print("\nFetching next batch of events: (Page \(page))\n")
}

override func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let  height = scrollView.frame.size.height
    let contentYoffset = scrollView.contentOffset.y
    let distanceFromBottom = scrollView.contentSize.height - contentYoffset
    if distanceFromBottom < height {
        fetchMoreEvents()
    }
}

我在哪里出错了,我该如何解决这个问题,以便它只获得一页,然后等待用户再次到达底部,然后又一页,等等?



Best Answer-推荐答案


您缺少一些信息来正确分页。首先,正如您已经发现的那样,您需要一个 isLoading 标志来防止在有待处理请求时出现多个请求。其次,您需要有一个 pageSize,您应该将其传递到您的请求中。第三,您需要有一个 hasMoreData 标志,该标志最初为 true,当您返回的项目少于 pageSize 的结果时设置为 false(即,如果我要求 25 items,我回来5,那么一定是我在最后一页,所以hasMoreData应该设置为false)。

在您的 fetch 顶部放置一个守卫以防止 fetch 除非您没有加载并且您有更多数据:

guard hasMoreData && isLoading == false else { return }

关于ios - 分页功能在第一次触发时获取比必要更多的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53523075/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap