删除表格单元会导致崩溃

当使用deleteRowsAtIndexPaths删除表格单元格时,如果尝试使用滑动手势删除单元格以进入编辑模式,然后点击删除,则会发生崩溃。 如果通过切换编辑/完成button进入编辑模式,那么删除单元格时,表格将正常更新而不会出现问题。

我也试过使用[table beginUpdates][table endUpdates]也没有成功。 另外[table reloadData]在这两种情况下工作也正如你所看到的我已经尝试[table reloadSections:[NSIndexSet indexSetWithIndex: indexPath.section] withRowAnimation: UITableViewRowAnimationFade]; 在编辑/完成button进入编辑模式时出现相同的崩溃。

 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { NSMutableArray *temp = nil; switch (indexPath.section) { case 0: { temp = self.entireSavedArray; break; } case 1: { temp = self.entireSavedArray2014; break; } case 2: { temp = self.entireSavedArray2013; break; } case 3: { temp = self.entireSavedArray2012; break; } case 4: { temp = self.entireSavedArray2011; break; } case 5: { temp = self.entireSavedArray2010; break; } default: break; } [temp removeObjectAtIndex: ((int)indexPath.row * 11)]; [temp removeObjectAtIndex: ((int)indexPath.row * 11)]; [temp removeObjectAtIndex: ((int)indexPath.row * 11)]; [temp removeObjectAtIndex: ((int)indexPath.row * 11)]; [temp removeObjectAtIndex: ((int)indexPath.row * 11)]; [temp removeObjectAtIndex: ((int)indexPath.row * 11)]; [temp removeObjectAtIndex: ((int)indexPath.row * 11)]; [temp removeObjectAtIndex: ((int)indexPath.row * 11)]; [temp removeObjectAtIndex: ((int)indexPath.row * 11)]; [temp removeObjectAtIndex: ((int)indexPath.row * 11)]; [temp removeObjectAtIndex: ((int)indexPath.row * 11)]; [self.table deleteRowsAtIndexPaths: [NSArray arrayWithObjects: indexPath, nil] withRowAnimation: UITableViewRowAnimationFade]; //[tableView reloadSections:[NSIndexSet indexSetWithIndex: indexPath.section] withRowAnimation: UITableViewRowAnimationFade]; } } 

 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { // Remove from our mutable array [data removeObjectAtIndex:indexPath.row]; // Remove from table view [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; } } 

删除一行时,使用上面的代码适用于我。

问题在于滑动手势将表格放入编辑模式,而不用点击编辑/完成button。 这通常不会是一个问题,但是当表格不处于编辑模式时,我将占位符单元格添加到表格中,然后在完成button被按下时将其添加回来。 (我改变了我的数据模型)当我最初创build的应用程序,我已经解决了,当编辑/完成button被点击进行调整。

解决scheme :由于滑动手势进入编辑模式,而不点击编辑/完成button,我需要以另一种方式进行调整。 我通过使用:

 - (void)tableView:(UITableView*)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath{ [self makeAdjustments]; } 

并在这里作出调整:

 - (void)tableView:(UITableView*)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath{ [self makeAdjustments]; }