如何删除多行时如何实现NSFetchedResultsController委托?

时间:2014-10-07 10:09:48

标签: ios uitableview core-data nsfetchedresultscontroller

删除了两个项目。

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:错误:严重的应用程序错误。抓住了例外   在核心数据更改处理期间。这通常是一个bug   NSManagedObjectContextObjectsDidChangeNotification的观察者。   无效更新:第0节中的行数无效   更新(0)后必须包含在现有部分中的行   等于之前该部分中包含的行数   update(2),加上或减去插入或删除的行数   该部分(0插入,1删除)和加号或减号的数量   移入或移出该部分的行(0移入,0移出)。同   userInfo(null)

     

***由于未捕获的异常'NSInternalInconsistencyException'而终止应用,原因:'无效更新:无效   第0节中的行数。包含在中的行数   更新后的现有部分(0)必须等于数量   更新前的该部分中包含的行(2),加号或减号   从该部分插入或删除的行数(插入0,   删除1)加上或减去移入或移出的行数   该部分(0移入,0移出)。'

1 个答案:

答案 0 :(得分:2)

你需要批量生产'通过实现controllerWillChangeContentcontrollerDidChangeContent委托方法进行更新,如下所示(虽然抱歉这些是Obj-c):

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
    [self.tableView beginUpdates];
}

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
    [self.tableView endUpdates];
}