我使用的是- (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:它工作!
雖然移動細胞,你確定'fromIndexPath'部分是空的? – Zen