【问题标题】:UITableView - Index out of range when segment selected while scrollingUITableView - 滚动时选择段时索引超出范围
【发布时间】:2018-01-04 07:41:47
【问题描述】:

当滚动tableView 时更改segmentedControl 索引时,我在cellForRowAt 中得到“Index out of range”。

@IBAction func segmentedControlAction(_ sender: AnyObject!) {
        if(segmentedControl.selectedSegmentIndex == 0) {
            self.data?.removeAll()
            loadA()
        }
        else if(segmentedControl.selectedSegmentIndex == 1){
            self.data?.removeAll()
            loadB()
        }
    }

 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! CustomCell

        cell.data = self.data?[indexPath.row] ---> Error here
        return cell
}

LoadA 和 LoadB 是类似的函数

func loadA(){
        API.sharedInstance.loadA(start, callback:  { response in
            if let data = response["data"].arrayValue as [JSON]?{
                self.data = data
                DispatchQueue.main.async {
                    self.tableView?.reloadData()
                }
            }
        })
    }

【问题讨论】:

  • 显然你正在重置 self.data?.removeAll() 并通过索引访问空对象。
  • 更新问题

标签: swift scroll tableview uisegmentedcontrol


【解决方案1】:

您首先删除所有数据但不重新加载表。然后您调用一个异步方法,该方法稍后会在后台更新数据,最后重新加载主队列上的表视图。

您只需要在重新加载表视图之前立即更新数据模型。

@IBAction func segmentedControlAction(_ sender: AnyObject!) {
    if(segmentedControl.selectedSegmentIndex == 0) {
        loadA()
    }
    else if(segmentedControl.selectedSegmentIndex == 1){
        loadB()
    }
}

func loadA(){
    API.sharedInstance.loadA(start, callback:  { response in
        if let data = response["data"].arrayValue as [JSON]?{
            DispatchQueue.main.async {
                self.data = data
                self.tableView?.reloadData()
            }
        }
    })
}

【讨论】:

  • 为了保证一致性,我先用空数据重新加载,然后用新数据重新加载
  • @CZ54 为什么?没有理由这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 2017-09-19
相关资源
最近更新 更多