从表格视图中删除单元格
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 功能,因为我基本上只是从核心数据中删除对象,获取新对象然后更新视图!以上是关于从表格视图中删除单元格的主要内容,如果未能解决你的问题,请参考以下文章