删除UITableView Room错误

时间:2016-02-13 21:44:50

标签: uitableview core-data xcode7

尝试删除TableView项时出现以下错误。

  

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

我使用以下代码:

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {

if editingStyle == .Delete {

    let roomToDelete : House = self.frc.objectAtIndexPath(indexPath) as! House
    moc.deleteObject(roomToDelete)

    do {
        try moc.save()
      } catch {
        print("Failed to save upon delete")
        return
     }

   tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
   self.tableView.reloadData()

   }

}

如果我关闭最后两行代码,那么我不会收到错误,但该行不会删除,因为我只是从Core Data中删除数据。如果我离开桌子并返回线路就不见了。我假设错误是因为我在某种程度上没有将行删除与部分中的行数相关联,因此存在不匹配。我所做的所有搜索都返回了与我所拥有的类似的编程。

2 个答案:

答案 0 :(得分:0)

您应该将视图控制器设置为FRC委托,并使用委托方法更新表视图。由于FRC是您的数据源,因此必须知道删除才能更新行数。

在提交方法中,您应该只是从上下文中删除对象。您不应该从表中删除该行或重新加载该表(应该由FRC委托方法完成)。

答案 1 :(得分:0)

我能够通过 -

让它工作

1)删除

tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)

来自提交编辑样式函数AND

2)添加

self.tableView.reloadData()

到viewDidLoad函数的末尾