2013-06-21 76 views
0

我使用的是- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath;的UITableView刪除-tableView後空部分:moveRowAtIndexPath:ToIndexPath:導致崩潰

功能,我發現如果fromIndexPath部分是空的。如果是的話,我有以下代碼:

NSString *fromSection = [sections objectAtIndex:fromIndexPath.section]; 
    [savedTable beginUpdates]; 
    NSIndexSet *indexSections = [NSIndexSet indexSetWithIndex:[sections indexOfObject:fromSection]]; 
    [savedTable deleteSections:indexSections withRowAnimation:UITableViewRowAnimationFade]; 
    [sections removeObject:fromSection]; 
    [savedTable endUpdates]; 

但是,這會導致應用程序會與下面的錯誤崩潰:

*終止應用程序由於未捕獲的異常「NSInternalInconsistencyException」,原因:'無效更新:第0節中的行數無效。更新(0)後現有節中包含的行數必須等於更新前該節中包含的行數(4),加上或減去數字插入或從該部分刪除的行(0插入,0刪除)以及加或減移入或移出該部分的行數(移入0,移出0)。

從錯誤說,它看起來像當我刪除(第一)部分,它沒有註冊,所以它認爲從第二部分的4行已不正確地移動到第一部分。我如何讓它知道該部分已被刪除,這就是爲什麼4行已被移動到第一部分。這將停止NSInternalInconsistencyException錯誤。

**編輯:如果在被刪除的部分下面有一個部分,則應用程序只會崩潰。這就是爲什麼更多行被「不正確」添加的原因。在那種情況下,當我重新啓動應用程序時,該部分已成功刪除。一切似乎都正常。

*我解決了這個問題。首先,當我結束更新時,我沒有完全更新數據庫。但即使這樣也行不通。所以我只用了0.1秒的延遲來刪除部分通過使用-performSelector:withObject:afterDelay:它工作!

+0

雖然移動細胞,你確定'fromIndexPath'部分是空的? – Zen

回答

1

這通常發生時的

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

實施仍返回您要刪除的部分指標已刪除的分區的行數。請檢查並確保此調用將返回「下一個」部分的行數(現在將發生在已刪除部分的索引處)。

0

檢查方法numberOfRowsInSectionnumberOfSectionsInTableView是正確的,並呼籲[tableview reloadData]