微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 TableView 中分页时正确加载数据

如何解决在 TableView 中分页时正确加载数据

我尝试在 tableView 中实现分页。我的 JSON API 允许分页。我可以在 tableview 上显示数据,但是当我尝试进行分页时会出现问题。

var generalArticles = [Article]()

//Pagination
    var page = 0
    var pagingLimit = 3
    var isPagining = false


override func viewDidLoad() {
generalArticlesFetch(pub: language.preferredLanguage(),page: page)
}

这是我的 API 调用。我用 JSON 数据填充数组

func generalArticlesFetch(pub:String,page:Int){
        
        
        activityIndicator.startAnimating()
        let url = "http://cofax.xxxxxxxx.com/ws/articles/?pub=\(pub)&size=5&page=\(page)"
        URLSession.shared.dataTask(with:URL(string: url)!) { (data,response,err) in
            
           
            if err != nil {
                print(err!.localizedDescription)
               
            }else {
                do{
                    self.generalArticles = try JSONDecoder().decode([Article].self,from: data!) 
                   
                    if self.isPagining{//if pagining is true I added new data to prevIoUs array
                        
                        self.generalArticles.append(contentsOf: self.generalArticles)
                        self.isPagining = false 
                       
                    }
                    
                    
                            dispatchQueue.main.async {
                           self.activityIndicator.stopAnimating()                              
                            self.tableView.tableFooterView = nil
                                
                                self.tableView.reloadData()
                                
                                        
                            }
                            
                        }
                    }
                    
                }catch{
                    print(error.localizedDescription)
                }
                
            }
            
        }.resume()
    }

在这里,我检查用户滚动到底部,然后将页面增加一个然后调用函数

func scrollViewDidEndDragging(_ scrollView: UIScrollView,willDecelerate decelerate: Bool) {
        print("scrollViewDidEndDragging")
            if ((tableView.contentOffset.y + tableView.frame.size.height) >= tableView.contentSize.height)
            {
                isPagining = true
                if page == pagingLimit {
                    isPagining = false
                   
                }else{
                    isPagining = true
                    if isPagining{
                        
                        page += 1
                        
                        generalArticlesFetch(pub: language.preferredLanguage(),page: page)
                    }
                }
                
                    
                
            }
    }

问题是当我滚动到底部时,数据被复制但添加了 5 个单元格,或者如果大小大于 40,我以前的数据就会消失……但新数据正在添加。可能问题出在这里self.generalArticles.append(contentsOf: self.generalArticles) 但如果是这样,我如何将新数据附加到以前的数组?

谢谢:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。