在swift中点击删除后单元格滞后

时间:2015-10-05 13:56:43

标签: ios swift uitableview core-data

所以我制作了一个用CoreData对象填充的tableview。单元格本身有一个标题的自定义类和另外两个按钮。但删除方法是经典的苹果类型:

 func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]?

无论如何,所有单元格都加载得很好,我可以对它们进行排序,更改它们的值等等。但是,当我向左滑动后点击删除时,单元格保持固定在滑动位置上,我得到了这个错误控制台:

“CoreData:错误:严重的应用程序错误。在调用-controllerDidChangeContent期间从NSFetchedResultsController的委托中捕获到异常:无效更新:第0部分中的行数无效。现有部分中包含的行数更新(8)必须等于更新前的该部分中包含的行数(8),加上或减去从该部分插入或删除的行数(0插入,1删除)和加号或减号移入或移出该部分的行(0移入,0移出)。用userInfo(null)“

在那之后,我无法对那个细胞做任何事情。有趣的是,单元格本身和CoreData对象被删除,因为如果我将视图从表视图控制器更改为我的主视图,再次更改为表视图,则单元格不再存在。起初我以为我只需要打电话给

     tableView.reloadData()     

方法,但它不起作用。 请注意,这不会导致崩溃,但如果我再次重新删除删除按钮,毫无疑问它会在对象成功删除后崩溃。

这里有什么想法吗?

1 个答案:

答案 0 :(得分:1)

UI与Core Data分开。核心数据是持久层,您希望显示的数据在UI中进行镜像。

您正在删除Core Data中的数据,但您没有正确更新UI。

如果您使用的是NSFetchedResultsController,那么您在委托方法中会出错。使用调试器和断点来找出未正确从UI中删除行的原因。

如果您没有使用NSFetchedResultsController,则删除表格视图的通知不正确。