Dispatch.main.async部分

时间:2017-07-29 13:13:57

标签: ios swift core-data dispatch

当我快速检查我的任务时,我遇到了问题,这会导致应用程序崩溃并导致错误:

  

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

使用radiobutton时的代码

func RadioTapped(_ cell: TableViewCell) {
    if let indexPath = tableView.indexPath(for: cell) {
        // Removes task from coreData
        let task = self.tasks[indexPath.row]

        self.context.delete(task)
        do {
            self.tasks = try self.context.fetch(TodayTask.fetchRequest())
            (UIApplication.shared.delegate as! AppDelegate).saveContext()

            // Animate the removal of task cell
            DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(800),execute: {
                self.tableView.deleteRows(at: [indexPath], with: .fade)                    
            })
        } catch {
            print("Fetching failed")
        }
    }
}

1 个答案:

答案 0 :(得分:1)

  

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

此崩溃意味着您要删除表格行。您没有更新您的arrayCount,例如您已在numberOfRowsInSection方法中定义了8,然后在删除行之前,您还需要根据要删除的行更新行数。否则,当您deleteRows调用它时,它也会调用numberOfRowsInSection方法,并且计数将不匹配,并且会崩溃。