' NSInternalInconsistencyException'尝试为同一索引路径出列多个单元格,这是不允许的

时间:2017-12-19 12:16:14

标签: ios swift uitableview swift4

我的应用程序崩溃了

  

由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:'尝试将同一索引路径的多个单元格出列,这是不允许的。如果您确实需要出现比表视图请求更多的单元格,请使用-dequeueReusableCellWithIdentifier:方法(不带索引路径)。

当我尝试重新加载tableView的单个单元格时,这是我按下以重新加载单元格的按钮

 @IBAction func reloadCell(_ sender: UIButton) {

        let index = IndexPath(row: sender.tag, section: 0)
        self.tableView.reloadRows(at: [index], with: .right)

    }

这些是我的 cellForRow DidSelectRow

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

            let cell = tableView.dequeueReusableCell(withIdentifier: resueIdentifier, for: indexPath) as! MyTableViewCell
            cell.delegate = self
            cell.myCellNumber.text = "\(indexPath.row + 1)"
            cell.refButton.tag = indexPath.row
            cell.refButton.addTarget(self, action: #selector(CourseClass2.reloadCell(_:)), for: .touchUpInside)
            let place = sortedArray[indexPath.row]
            cell.update(place: place)
            cell.selectionStyle = .none

             if indexPath.row == places.count - 1 {
                loadPlaces(false)
            }
            print("CellForRow Call")
            return (cell)


        }


   func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {


           tableView.deselectRow(at: indexPath, animated: true)

            UIView.animate(withDuration: 0.2, animations: {
            let cell = tableView.dequeueReusableCell(withIdentifier: "MyTableViewCell", for: indexPath) as! MyTableViewCell
        })
             performSegue(withIdentifier: "goToLast" , sender: indexPath)

        }

添加断点我看到应用程序在 DidSelectRow 中的此行崩溃。

let cell = tableView.dequeueReusableCell(withIdentifier: "MyTableViewCell", for: indexPath) as! MyTableViewCell

如何解决此问题?

1 个答案:

答案 0 :(得分:6)

您的didSelectRowAt方法应为:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {


    tableView.deselectRow(at: indexPath, animated: true)
    self.performSegue(withIdentifier: "goToLast", sender: indexPath)

}

如果您想在didSelectRowAt方法中识别您的单元格。你可以用:

if let cell = tableView.cellForRow(at: indexPath) as? MyTableViewCell {

}

使用didSelectRowAt方法。