删除多行时如何实现 NSFetchedResultsController 委托?
Posted
技术标签:
【中文标题】删除多行时如何实现 NSFetchedResultsController 委托?【英文标题】:How to implement NSFetchedResultsController delegate when multiple row is on deletion? 【发布时间】:2014-10-07 10:09:48 【问题描述】:两个项目被删除。
func controller(controller: NSFetchedResultsController!, didChangeObject anObject: AnyObject!, atIndexPath indexPath: NSIndexPath!, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath!)
switch(type)
case .Delete:
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
default:
break
在删除行我收到此错误:
CoreData:错误:严重的应用程序错误。异常被捕获 在核心数据更改处理期间。这通常是一个错误 NSManagedObjectContextObjectsDidChangeNotification 的观察者。 无效更新:第 0 节中的无效行数。 更新 (0) 后包含在现有节中的行必须是 等于该节之前包含的行数 update (2),加或减插入或删除的行数 该部分(0 插入,1 删除)和加或减的数量 移入或移出该部分的行(0移入,0移出)。和 用户信息(空)
*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:无效 第 0 节中的行数。包含在第 0 节中的行数 更新后的现有节(0)必须等于 更新之前该部分中包含的行 (2),加号或减号 从该部分插入或删除的行数(0 插入, 1 已删除)并加上或减去移入或移出的行数 该部分(0 移入,0 移出)。'
【问题讨论】:
【参考方案1】:您还需要通过实现 controllerWillChangeContent
和 controllerDidChangeContent
委托方法来“批量”更新,如下所示(尽管很抱歉这些是 Obj-c):
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
[self.tableView beginUpdates];
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
[self.tableView endUpdates];
【讨论】:
以上是关于删除多行时如何实现 NSFetchedResultsController 委托?的主要内容,如果未能解决你的问题,请参考以下文章