所以我制作了一个用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()
方法,但它不起作用。 请注意,这不会导致崩溃,但如果我再次重新删除删除按钮,毫无疑问它会在对象成功删除后崩溃。
这里有什么想法吗?
答案 0 :(得分:1)
UI与Core Data分开。核心数据是持久层,您希望显示的数据在UI中进行镜像。
您正在删除Core Data中的数据,但您没有正确更新UI。
如果您使用的是NSFetchedResultsController
,那么您在委托方法中会出错。使用调试器和断点来找出未正确从UI中删除行的原因。
如果您没有使用NSFetchedResultsController
,则删除表格视图的通知不正确。