Swift iOS在表格视图中添加行后可以使用reloadData吗?

时间:2018-12-12 05:07:50

标签: ios swift uitableview

在表格视图中 如果添加一行后使用reloadData,我认为性能不好 reloadData是为此目的设计的吗?

如果没有 如何添加行?

我第一次使用reloadData() 现在使用

 let index = IndexPath(row: dataList.count - 1, section: 0)
 tableView.storyTableView.insertRows(at: [index], with: .none)

但加注NSInternalInconsistencyException

所以我将再次使用reloadData

如果我继续使用reloadData是否有问题?

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if dataList.count < 1{
        self.emptyTableLabel.layer.zPosition = 2
    }else{
        self.emptyTableLabel.alpha = 0
    }
    return dataList.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "DataCell", for: indexPath) as! Datacell
    cell.parentTable = self
    let data = self.dataList[indexPath.row]
    cell.indexLabel.text = "\(indexPath.row+1)"
    cell.nick.text = (data["UserNick"] as! String)
    cell.content.text = (data["Content"] as! String)
    cell.index = indexPath.row
    cell.time.text = (data["RegisterDate"] as! String).calculDateTime()
    return cell
}

动态地将用户的值添加到表视图中, 当数据一一进入时,它会很好地工作。

但是如果几乎同时接收到多个值,则会抛出NSInternalInconsistencyException异常。

2 个答案:

答案 0 :(得分:1)

Go through this Perform updates method

func performBatchUpdates(_ updates: (() -> Void)?, 
              completion: ((Bool) -> Void)? = nil)

在此处执行插入操作,并在完成后重新加载Tableview

答案 1 :(得分:1)

tableView.performBatchUpdates ({
    let index = IndexPath(row: dataList.count - 1, section: 0)
    tableView.storyTableView.insertRows(at: [index], with: .none)
},
completion: { (success) in
    tableView.reloadData()
}
)

选中这个