我有一個NSFetchedResultsController支持的UITableView,它可以在任何時候觸發更新。如果用戶正在重新排序行,將這些更新將導致異常,因爲表視圖暫時接管,你會得到像當UITableView被重新排序時檢測
Invalid update: invalid number of rows in section [...]
錯誤我如何檢測,當用戶已經開始移動的小區,所以我可以延遲更新結果控制器造成的更新嗎?似乎沒有任何表視圖委託方法來檢測這一點。該委託方法:
- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath {
在用戶首次分離的第一個單元格不會被調用,只有當他們實際移動到其他地方。
一種解決辦法是檢查所取得的成果回調isEditing
,只是做了散裝reloadData
,而不是動態插入/刪除行,但我不知道是否有一種方法專門爲「重排」模式檢查。
但可能tableview可能會調用,而不是在移動單元格之前。沒有文件記錄,在移動單元之前總是調用它,所以依靠這種行爲不太可能是未來的證明。我的數據模型沒問題,我正在以標準方式將更改合併到核心數據模型中,以便在主線程上正確發送更改請求。 – 2010-05-07 10:15:55
在UI移動單元格之前,每次調用此方法。數據模型驅動更改時不會調用它。唯一的目的是檢查UI事件是否可以移動單元格。你將不得不設置標誌來防止數據或用戶改變表格,而另一個用戶正在做它。你有一個競爭條件。 – TechZen 2010-05-07 16:17:19