2015-08-28 158 views
0

我有一個應用程序與UITableView可以刪除單元格使用行操作。但是,如果我快速連續執行兩次,則應用程序會與BAD_EXEC一起崩潰。UITableView崩潰,如果我刪除行太快

問題顯然與時間有關。我要求桌子在完成舊的事情之前做其他事情。它可能是動畫,也可能是細胞的去除。

無論哪種方式,在我開始之前在tableview上調用reloadData似乎可以修復它。這個解決方案有兩個問題。

首先,reloadData會干擾通常的行刪除動畫的一些好處。這不是什麼大問題,但我更喜歡它與所有動畫完好無損。

其次,我還沒有完全理解發生了什麼。

任何人都可以幫助我理解和/或提出更好的解決方案嗎?

下面的代碼...

-(void) rowActionPressedInIndexPath: (NSIndexPath *)indexPath timing:(Timing) doTaskWhen 
{ 
    [self.tableView reloadData]; // This is my current solution 

    [self.tableView beginUpdates]; 

    ToDoTask *toDo = [self removeTaskFromTableViewAtIndexPath:indexPath]; 
    toDo.timing = doTaskWhen; // Just some data model updating. Has no effect on anything else here. 

    [self.tableView endUpdates]; 
} 

removeTaskFromTableView大多是代碼的工作,如果我需要刪除一整節或行。我已確認該應用程序,使得正確的選擇和錯誤仍然可以正常工作,從而從方法的唯一相關的信息是...

[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft]; 

編輯:我已經注意到,標準刪除行操作提供該系統不允許我快速移動。有一個內置的延遲(大概)可以防止這個確切的問題。

+1

您還需要更新Array。在各個索引處添加/刪除對象。 –

+0

你的數據源怎麼樣也得到更新? –

+0

該表只顯示具有特定時間的項目,因此更改toDo對象時間的行是更新。無論如何,只有我快速行動纔會發生,而如果我沒有更新模型,每次我做任何事情都會發生各種問題。 –

回答

0
-(void) rowActionPressedInIndexPath: (NSIndexPath *)indexPath timing:(Timing) doTaskWhen 
{ 
    // [self.tableView reloadData]; // This is my current solution 

    [self.tableView beginUpdates]; 

    ToDoTask *toDo = [self removeTaskFromTableViewAtIndexPath:indexPath]; 
    toDo.timing = doTaskWhen; // Just some data model updating. Has no effect on anything else here. 

    [self.tableView endUpdates]; 
} 

或嘗試重新加載主線程中的表視圖。