使用动画删除表格行

时间:2015-07-12 06:59:34

标签: swift animation row

我想在表视图控制器中删除带动画的行。 我使用以下代码:

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if (editingStyle == .Delete) {

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

        let LM_ITEM = lebensmittel[indexPath.row]
        managedObjectContext?.deleteObject(lebensmittel[indexPath.row])
        self.DatenAbrufen()
    }
}

但按下删除后,我收到此错误:

  

由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0节中的行数无效。更新后的现有部分中包含的行数(1)必须等于行数在更新(1)之前包含在该部分中,加上或减去从该部分插入或删除的行数(0插入,1删除)和加或减移入或移出该部分的行数(0移入,0搬出去。)   ***首先抛出调用堆栈:
  (0x1856382d8 0x1973040e4 0x185638198 0x1864eced4 0x18a296e5c 0x10010e278 0x10010ef9c 0x18a2b0ea4 0x18a3a6880 0x18a0e5398 0x18a0ce474 0x18a0e4d34 0x18a0a3f54 0x18a0de82c 0x18a0ddee4 0x18a0b1120 0x18a3522b8 0x18a0af634 0x1855f0240 0x1855ef4e4 0x1855ed594 0x1855192d4 0x18ef6f6fc 0x18a116f40 0x100134420 0x1979aea08)
  libc ++ abi.dylib:以NSException类型的未捕获异常终止

4 个答案:

答案 0 :(得分:7)

您需要在致电tableView.deleteRowsAtIndexPaths(..)

之前更新模型 像这样,

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if (editingStyle == .Delete) {

        let LM_ITEM = lebensmittel[indexPath.row]
        managedObjectContext?.deleteObject(lebensmittel[indexPath.row])
        self.DatenAbrufen()

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

答案 1 :(得分:3)

将其用于Swift 4

tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.automatic)

它将删除带有动画的tableView行,类似于iPhone消息传递应用程序。

答案 2 :(得分:2)

尝试以下方法:

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if (editingStyle == .Delete) {

        let LM_ITEM = lebensmittel[indexPath.row]
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
        managedObjectContext?.deleteObject(LM_ITEM)
        self.DatenAbrufen()

    }
}

答案 3 :(得分:1)

Swift 4.2

tableView.deleteRows(at: [IndexPath(row: 0, section: 0)], with: .automatic)