Swift UIrefreshcontrol不';t使用分页重新加载新项目

Swift UIrefreshcontrol不';t使用分页重新加载新项目,swift,cocoapods,pull-to-refresh,Swift,Cocoapods,Pull To Refresh,我已经导入了一个cocoa pod,即PaginatedTableView,它内置了UIRefreshControl和分页功能。当我打开页面时,由于索引超出范围错误,应用程序崩溃,我认为这是由于刷新控制造成的 我试着找出错误的地方,但似乎没有问题 lazy var refreshControltableView: UIRefreshControl = { let refreshControl = UIRefreshControl() refreshControl.attribut

我已经导入了一个cocoa pod,即PaginatedTableView,它内置了UIRefreshControl和分页功能。当我打开页面时,由于索引超出范围错误,应用程序崩溃,我认为这是由于刷新控制造成的

我试着找出错误的地方,但似乎没有问题

lazy var refreshControltableView: UIRefreshControl = {
    let refreshControl = UIRefreshControl()
    refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
    refreshControl.addTarget(self, action: #selector(self.handleRefreshtableView(_:)), for: UIControl.Event.valueChanged)
    return refreshControl
}()

extension PaginatedTableView {

public func loadData(refresh: Bool = false) {
    load(refresh: refresh)
}

@objc fileprivate func handleRefreshtableView(_ refreshControl: UIRefreshControl) {
    load(refresh: true)
}

// All loading logic goes here i.e. showing/hiding of loaders and pagination
private func load(refresh: Bool = false) {

    // reset page number if refresh
    if refresh {
        currentPage = firstPage
        hasMoreData = true
    }

    // return if already loading or dont have any more data
    if !hasMoreData || isLoading {
        return }

    // start loading
    isLoading = true

    paginatedDelegate?.loadMore(currentPage, pageSize, onSuccess: { hasMore in
        self.hasMoreData = hasMore
        self.currentPage += 1
        self.isLoading = false
        self.refreshControltableView.endRefreshing()
        if self.customReloadDataBlock != nil {
            self.customReloadDataBlock?()
        } else {
            self.reloadData()
        }
    }, onError: { _ in
        self.refreshControltableView.endRefreshing()
        self.isLoading = false
    })
}

// Scroll to end detector
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let height = scrollView.frame.size.height
    let contentYoffset = scrollView.contentOffset.y
    let distanceFromBottom = scrollView.contentSize.height - contentYoffset
    if distanceFromBottom < height {
        load()
    }
}
}



func loadMore(_ pageNumber: Int, _ pageSize: Int, onSuccess: ((Bool) -> Void)?, onError: ((Error) -> Void)?) {
    // Call your api here
    if pageNumber < pages - 1 {
        onSuccess?(true)
        print("success")
    }
    else {
        onSuccess?(false)
    }
    // Send true in onSuccess in case new data exists, sending false will disable pagination

    // If page number is first, reset the list
    if pageNumber == 0 {
        cleaner()
        }
    myApi(pageNumber)
    // else append the data to list
    // If Api responds with error


    // Else end success with flag true if more data available
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! myTableCell
    cell.myLabel.text = self.labelArray[indexPath.row]
    cell.myImage.image = self.imageArray[indexPath.row]
    cell.myDateLabel.text = self.labelDateArray[indexPath.row]
    return cell
}
lazy var refreshControltableView:UIRefreshControl={
让refreshControl=UIRefreshControl()
refreshControl.attributedTitle=NSAttributedString(字符串:“拉入刷新”)
refreshControl.addTarget(self,action:#选择器(self.handleRefreshtableView(35;:)),用于:UIControl.Event.valueChanged)
返回刷新控制
}()
扩展分页表视图{
公共函数加载数据(刷新:Bool=false){
加载(刷新:刷新)
}
@objc fileprivate func HandlerRefreshTableView(refreshControl:UIRefreshControl){
加载(刷新:真)
}
//所有加载逻辑都在这里,即显示/隐藏加载程序和分页
私有函数加载(刷新:Bool=false){
//如果刷新,则重置页码
如果刷新{
当前页=第一页
hasMoreData=true
}
//如果已经加载或没有更多数据,则返回
如果!hasMoreData | |正在加载{
返回}
//开始加载
isLoading=true
paginatedDelegate?.loadMore(当前页面,页面大小,onSuccess:{hasMore in
self.hasMoreData=hasMore
self.currentPage+=1
self.isload=false
self.refreshControltableView.endRefreshing()
如果self.customReloadDataBlock!=nil{
self.customReloadDataBlock?()
}否则{
self.reloadData()
}
},onError:{in
self.refreshControltableView.endRefreshing()
self.isload=false
})
}
//滚动到结束检测器
公共函数scrollViewDidScroll(scrollView:UIScrollView){
让高度=scrollView.frame.size.height
让contentYoffset=scrollView.contentOffset.y
让distanceFromBottom=scrollView.contentSize.height-contentYoffset
如果距离底部<高度{
加载()
}
}
}
func loadMore(uPageNumber:Int,pageSize:Int,onSuccess:((Bool)->Void)?,onError:((Error)->Void)?){
//在这里调用api
如果页码<第1页{
成功吗?(对)
打印(“成功”)
}
否则{
成功吗?(错误)
}
//onSuccess中发送true如果存在新数据,发送false将禁用分页
//如果页码在前,请重置列表
如果pageNumber==0{
清洁剂()
}
myApi(页码)
//否则将数据追加到列表中
//如果Api响应错误
//如果有更多数据可用,则使用标志true结束成功
}
func tableView(tableView:UITableView,cellForRowAt indexath:indexPath)->UITableViewCell{
让cell=tableView.dequeueReusableCell(标识符为:“myCell”,表示:indexPath)为!myTableCell
cell.myLabel.text=self.labelArray[indexPath.row]
cell.myImage.image=self.imageArray[indexPath.row]
cell.myDateLabel.text=self.labelDateArray[indexPath.row]
返回单元
}
loadMore函数位于委托类中。myApi函数查找数据并将其附加到列表中。
这是我认为与我的问题有关的Pod代码。提前感谢。

您知道是哪一行导致了错误吗?尝试在Xcode中设置异常断点。然后你就会知道是什么导致了超出范围的错误。我添加了它,但什么也没发生。实际上,我的错误在cellforrowat函数中,因为列表索引超出范围。我想当我刷新tableview时,我会删除列表,但当我向下滚动时,它不会重新加载。请在我刚刚添加的
cellForRowAt中共享您的代码。可能是三个数据数组中的一个不同步,导致了错误。我不使用三个不同的数组,而是使用具有三个属性的结构数组:label、image和labelDate。