如何解决在 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)
}
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 举报,一经查实,本站将立刻删除。