【问题标题】:TableView row removal with NSFetchedResultsController crashing?NSFetchedResultsController 崩溃的 TableView 行删除?
【发布时间】:2017-05-13 07:27:23
【问题描述】:

我试图让用户从使用 NSFetchedResultsController 填充的 UITableView 中删除一行,但不断收到致命错误:

由于未捕获的异常而终止应用程序 'NSInternalInconsistencyException',原因:'无效更新:无效 第 1 节中的行数。包含在第 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()
    }
}

谁能帮助理解我做错了什么?

【问题讨论】:

  • 尝试先从表中删除,然后再从核心数据中删除。
  • 不起作用。 :(
  • 和以前一样的错误?
  • 是的,很遗憾
  • ok 删除 beginUpdates 和 endUpdates 并删除,而不仅仅是重新加载表,看看它是否解决了问题?

标签: uitableview nsfetchedresultscontroller


【解决方案1】:

如果您使用获取的结果控制器。只用删除对象

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 {}

    }
}

你不需要beginUpdatesendUpdates

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多