Uitableview NSFetchedResultsController崩溃时删除TableView行?
我试图让用户从使用Uitableview NSFetchedResultsController崩溃时删除TableView行?,uitableview,nsfetchedresultscontroller,Uitableview,Nsfetchedresultscontroller,我试图让用户从使用NSFetchedResultsController填充的UITableView中删除一行,但始终会收到一个致命错误: 由于未捕获异常而终止应用程序 'NSInternalInconsistencyException',原因:'无效更新:无效 第1节中的行数。表中包含的行数 更新(7)后的现有节数必须等于 更新(7)之前该节中包含的行,加号或减号 从该节插入或删除的行数(插入0, 1)并加上或减去移入或移出的行数 该部分(0移入,0移出)。' 我正在删除核心数据条目,然后在我的
NSFetchedResultsController
填充的UITableView
中删除一行,但始终会收到一个致命错误:
由于未捕获异常而终止应用程序
'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()
}
}
有人能帮助理解我做错了什么吗?如果您使用“获取结果”控制器。仅删除带有
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 {}
}
}
如果使用“获取结果”控制器,则不需要
开始更新
和结束更新
。仅删除带有
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 {}
}
}
您不需要
开始更新
和结束更新
尝试先从表中删除,然后再从核心数据中删除。不起作用:(与以前相同的错误?是的,不幸的是,删除BeginUpdate和EndUpdate并删除,而不仅仅是重新加载表,看看它是否解决了问题?尝试先从表中删除,然后再从核心数据中删除。不起作用。:(与以前相同的错误?是的,不幸的是,删除BeginUpdate和EndUpdate并删除,而不仅仅是重新加载表,看看它是否解决了问题?