在滚动Index out of range
时更改cellForRowAt
索引时,我在segmentedControl
中收到“tableView
”。
@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()
}
}
})
}
答案 0 :(得分: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()
}
}
})
}