【问题标题】:How to implement NSFetchedResultsController delegate when multiple row is on deletion?删除多行时如何实现 NSFetchedResultsController 委托?
【发布时间】: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 移出)。'

【问题讨论】:

    标签: ios uitableview core-data nsfetchedresultscontroller


    【解决方案1】:

    您还需要通过实现 controllerWillChangeContentcontrollerDidChangeContent 委托方法来“批量”更新,如下所示(尽管很抱歉这些是 Obj-c):

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-24
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多