尝试使用 Swift 实现无限滚动时陷入无限循环

Posted

技术标签:

【中文标题】尝试使用 Swift 实现无限滚动时陷入无限循环【英文标题】:Falling into an infinite loop when trying to implement Infinite Scrolling using Swift 【发布时间】:2018-11-22 00:48:49 【问题描述】:

非常感谢您对以下问题的帮助。

即使我已经实现了正确的布尔检查(所以我相信),当我向上滚动 tableView 时,我的代码陷入了无限循环...

Bool 检查我是否已经在获取更多内容:

var fetchingMore = false

这是我的scrollViewDidScroll函数:

func scrollViewDidScroll(_ scrollView: UIScrollView) 

    let offsetY = scrollView.contentOffset.y
    let contentHeight = scrollView.contentSize.height

    if offsetY > contentHeight - scrollView.frame.height

        if !fetchingMore

            radius += 5
            fetchMoreVenues()

        //end if

    //end if

//end func

这是我的fetchMoreVenues func,它获取更多内容但由于某种原因被无限调用

func fetchMoreVenues()

    fetchingMore = true

    DataService.run.fetchVenueNearby(deviceLocation: currentLocation, radius: radius)  (venues) in

        for venue in venues 

            if !self.venueArray.contains(where:  ($0.venueID == venue.venueID) )
                self.venueArray.append(venue)
            

            if !self.filteredVenueArray.contains(where:  ($0.venueID == venue.venueID) )
                self.filteredVenueArray.append(venue)
            

        //end for

        self.fetchingMore = false
        self.tableView.reloadData() 

    //end fetchVenueNearby

//end func

【问题讨论】:

【参考方案1】:

可能是相反的顺序

self.tableView.reloadData() 
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) 
  self.fetchingMore = false

【讨论】:

以上是关于尝试使用 Swift 实现无限滚动时陷入无限循环的主要内容,如果未能解决你的问题,请参考以下文章

尝试删除字符时陷入无限循环

为啥当我实现以 2^20 为底的基数排序以对大小为 500 万的数组进行排序时,该程序会陷入无限循环?

最简单粗暴的方式实现无限循环滚动的UIScrollView

Spring Batch SkipPolicy在处理异常时陷入无限循环

为啥应用程序在设置属性时会陷入无限循环?

HAL_Delay() 陷入无限循环