2011-02-26 57 views
0

我試圖動態更新一個UITableView細胞。事件由後臺線程收到的數據觸發,所以一切都是異步的,並且不可能預測事件的順序。工作流程與reloadRowsAtIndexPaths:withRowAnimation

我不知道有什麼工作流程應該是在這種情況下。如何在撥打reloadRowsAtIndexPaths:withRowAnimation時確保行計數和索引路徑正確?之前的電話號碼deleteRowsAtIndexPaths:withRowAnimation仍然可能會出現動畫。

如果所有更改同時發生,我可以使用beginUpdatesendUpdates,但是在上述情況下我該怎麼做?

回答

1

漢諾,我建議使用一個命令對象模型排隊主線程上的變化。

下面的方式:

  • 論在主線程回調,追加添加或刪除作爲對象到隊列(可變數組)。
  • 走在隊列的主線程中添加和刪除對象,每個操作都是原子(即首先獲得該表的狀態,處理它沒有中斷,刪除隊列的頭)
  • 決定是否要中斷動畫如果隊列中有更多命令,或者等待動畫結束,則處理下一個排隊的對象。

定時器和animationDidFinish回調的混合應該這樣做。

+0

爲什麼它要這麼複雜:-(事實證明,我的情況既'beginUpdates'和'呼叫endUpdates'足夠,因爲它強制的tableView重新加載電池幾何形狀。 – hanno 2011-02-26 20:30:18

0

既然你會做在主線程中的所有表更新呢(因爲UIKit中有主線程上被調用),我沒有在這裏看到一個併發問題。無論何時您接收到新數據,請在主線程上調用更新表的方法。此方法將阻止主線程,直到完成。這應該確保表視圖保持其完整性。

或者你關心重疊的行動畫?

+0

我在主線程中執行所有的UIKit的東西。但是,當動畫正在進行,刪除一個單元格,我想更新另一個單元格時,行計數/索引路徑變得混亂起來。 – hanno 2011-02-26 01:51:44