无法删除索引路径中的行

Posted

技术标签:

【中文标题】无法删除索引路径中的行【英文标题】:Not able to delete row at an indexpath 【发布时间】:2017-11-23 12:51:36 【问题描述】:

我有一些表格视图单元格,上面有一些数据,并且单元格上有一个十字按钮(在右上角),单击该按钮应该删除单元格。这就是我尝试删除的方式...

extension sellTableViewController: imageDelegate 
    func delete(cell: sellTableViewCell) 
        if let indexPath = tableview?.indexPath(for: cell) 
            //1.Delete photo from datasource
            arrProduct?.remove(at: indexPath.row)
            print(self.appDelegate.commonArrForselectedItems)

            tableview.deleteRows(at: [indexPath], with: .fade)

        
    

但是当我点击十字按钮时,我收到一条错误消息,上面写着The number of sections contained in the table view after the update (1) must be equal to the number of sections contained in the table view before the update (2), plus or minus the number of sections inserted or deleted (0 inserted, 0 deleted).'

我的tableviewnumberOfSectionsnumberOfRowsInSection给出如下...

    func numberOfSections(in tableView: UITableView) -> Int 
        return (arrProduct?.count)!

    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

        let product = arrProduct![section]

        return product.images.count
    

希望有人能帮忙...

【问题讨论】:

【参考方案1】:

您正在从 indexPath.row 的数组中删除项目,但您的数组包含部分而不是行

仅一行错误替换

        arrProduct?.remove(at: indexPath.row)

        arrProduct?.remove(at: indexPath.section)

希望对你有帮助

编辑

我认为您正在从数组中删除图像

arrProduct![indexPath.section].images.remove(at: indexPath.row)

【讨论】:

非常感谢@Jon Snow。工作得很好。也投了赞成票...再次感谢...:) 尽管一再建议begin-endUpdates() 对单个insert/delete/move 操作完全没有影响。 @bvt 很高兴听到该解决方案对您有用,祝您有美好的一天 是的!谢谢...:) 还有一个问题,@Jon Snow。您的建议确实正确删除了单元格。但也许它没有从数组中删除该特定元素,因为一旦我再次返回此屏幕,它就会持续存在。在这种情况下如何从数组中删除元素..?【参考方案2】:

您的代码混淆了部分和行。您是说部分的数量基于产品的数量 (arrProduct?.count),而行数是基于产品中该部分的图像数量 (arrProduct![section].images.count)。

但是在您的 delete 函数中,您删除了一个产品 (arrProduct?.remove(at: indexPath.row)),它对应于一个部分,但随后您删除了表格上的一行。

确保您在处理产品(部分)和图像(行)时清楚。

【讨论】:

以上是关于无法删除索引路径中的行的主要内容,如果未能解决你的问题,请参考以下文章

无法删除分区中的行

我无法删除主视图控制器中的行

无法删除数据框 python 3 中的行。值错误:真值不明确

无法使用 ORACLE APEX 删除交互式报表中的行

Firebase + Swift:无法删除 tableView 中的行

错误:无法通过行访问已删除的行信息