我正在尝试让用户从使用UITableView
填充的NSFetchedResultsController
中删除一行,但仍然会收到致命错误:
由于未捕获的异常而终止应用 'NSInternalInconsistencyException',原因:'无效更新:无效 第1节中的行数。包含在中的行数 更新后的现有部分(7)必须等于数量 更新前的该部分中包含的行(7),加号或减号 从该部分插入或删除的行数(插入0, 删除1)加上或减去移入或移出的行数 该部分(0移入,0移出)。'
我正在删除核心数据条目,然后在我的代码中删除tableView中的行但仍然出现上述错误:
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
self.feedTable.beginUpdates()
let event = self.fetchedResultsController.object(at: indexPath) as Event
self.managedObjectContext.delete(self.fetchedResultsController.object(at: indexPath))
do {
try self.managedObjectContext.save()
} catch {}
self.feedTable.deleteRows(at: [indexPath], with: .automatic)
self.feedTable.endUpdates()
}
}
任何人都可以帮助理解我做错了吗?
答案 0 :(得分:0)
如果使用获取的结果控制器。仅使用
删除对象self.managedObjectContext.delete(self.fetchedResultsController.object(at: indexPath))
试试这个解决方案
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
let event = self.fetchedResultsController.object(at: indexPath) as Event
self.managedObjectContext.delete(self.fetchedResultsController.object(at: indexPath))
do {
try self.managedObjectContext.save()
} catch {}
}
}
您不需要beginUpdates
和endUpdates