2013-05-25 137 views
-1

當使用deleteRowsAtIndexPaths刪除表格單元格時,如果嘗試使用滑動手勢刪除單元格以進入編輯模式,然後點擊刪除,則會發生崩潰。如果我通過切換編輯/完成按鈕進入編輯模式,然後刪除單元格,表格將正常更新而不會出現問題。刪除表格單元導致崩潰

我也試過使用[table beginUpdates] & [table endUpdates]也沒有成功。 也[table reloadData]在這兩種情況下都可以工作 也正如你所看到的,我已經嘗試[table reloadSections:[NSIndexSet indexSetWithIndex: indexPath.section] withRowAnimation: UITableViewRowAnimationFade];與編輯/完成按鈕進入編輯模式時相同的崩潰。

- (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]; 
    } 
} 
+1

後完整的錯誤消息。 – rmaddy

+1

如果可以製作代碼的正面或反面,這將有所幫助。評論將是有用的。 –

+0

用戶輕掃刪除表格中的單個行。然後從數據源數組中刪除11個對象。然後您告訴表格刪除1行。這並沒有加起來。你的'numberOfRowsInSection:'方法很可能有不匹配。 – rmaddy

回答

0
- (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]; 
    } 
} 

使用上面的代碼中的一行,當爲我工作。

+0

我發現一個明確的問題,當使用滑動刪除vs進入編輯模式通過使用編輯/完成按鈕。 –

+0

檢查numberOfRowsInSection方法時:即使編輯的部分是第一部分,每個部分都會報告正確的行數並且發生崩潰,直到爲最終部分調用方法。 –

0

問題在於滑動手勢會將表格放入編輯模式而不點擊編輯/完成按鈕。這通常不會成爲問題,但是當表格不處於編輯模式時,我將佔位符單元格添加到表格中,然後在完成按鈕被按下時將其添加回來。 (我改變了我的數據模型)當我最初創建應用程序時,我通過在點擊編輯/完成按鈕時進行調整來解決這個問題。

解決方案:由於滑動手勢進入編輯模式而不點擊編輯/完成按鈕,我需要以另一種方式進行調整。我這樣做是通過使用:

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

,也使調整的位置:

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