从表格视图中删除单元格

Posted

技术标签:

【中文标题】从表格视图中删除单元格【英文标题】:Delete cell from tableview 【发布时间】:2017-07-15 20:15:19 【问题描述】:

我正在使用核心数据来填充表格视图单元格。我正在尝试实现删除单元格的功能,但是我不断收到此错误

-[UITableView _endCellAnimationsWithContext:] 中的断言失败,/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.6.21/UITableView.m:1610 2017-07-15 22:07:51.077 烦人的警报 - 无法暂停或停止警报![7608:793341] *** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:无效的行数在第 0 节中。更新后现有节中包含的行数 (1) 必须等于更新前该节中包含的行数 (1),

我的视图控制器代码如下

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) 

    if editingStyle == .delete 

        let cell = tableView.cellForRow(at: indexPath) as! AlarmCell
        let identifier = cell.time.text

        for object in self.controller.fetchedObjects!
            if object.timeTitle == identifier 
                print("HELLO!")

               print("deep inside if")
               context.delete(object)
                ad.saveContext()
                tableView.deleteRows(at: [indexPath], with: .fade)
                //tableView.reloadData()

            
        

    


核心日期部分工作得很好,当我重新打开应用程序时,单元格确实消失了。我的问题是当我实际按下删除时

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

函数抛出上面显示的错误。当我将其注释掉时,不会发生崩溃,但单元格不会被删除,除非我转到另一个视图然后回到这个视图。

【问题讨论】:

您是否有一个数组,将所有获取的对象放入其中,然后读取该数组以填充您的表格? 如果您有一个要放入对象的数组,则需要先删除该项目,然后再从 Tableview 中删除单元格 你在使用 NSFetchedResultsController 吗?如果是这样,您是否实现了 NSFetchedResultsControllerDelegate?在那里,您删除 tableView 行。 为什么要使用繁琐的重复循环并从单元格中获取数据?要删除的对象就是self.controller.object(at: indexPath) 我没有对象数组来填充我的单元格,而是使用 NSFetchedResultsController 和索引路径来调用 configureCell 函数 【参考方案1】:

错误表示删除该行后,您应该将其从阵列中删除并更新阵列。那么你应该重新加载你的 tableview 以便你的 tableviews numberofrows 得到更新

【讨论】:

我在从数组中删除对象后做了一个 fetchrequest 并重新加载了 tableview 内容,现在它可以工作了!无需实现 tableview.deleterows 功能,因为我基本上只是从核心数据中删除对象,获取新对象然后更新视图!

以上是关于从表格视图中删除单元格的主要内容,如果未能解决你的问题,请参考以下文章

如何动画从表格视图(rxswift)中删除单元格?

无法从自定义表格视图单元格按钮中删除行

UI测试滑动删除表格视图单元格

从表格视图中删除一个单元格,删除按钮出现在文本字段后面

如何从表格中删除单元格

如何从表格视图单元格中的图像手势获取 indexPath