搜尋

首頁  >  問答  >  主體

objective-c - iOS開發如何正確地使用reloadData刷新tableView或collectionView

最近突然發現之前寫的iOS應用在刷新的時候偶爾會跑潰。
檢查了一下程式碼發現一個bug。導致bug的步驟如下:

  1. 用戶下拉tableview進行刷新。

  2. 將保存資料的NSArray清除。

  3. 取得網路數據,然後再填入NSArray。

正常情況下這樣做並沒有問題。
但是,如果使用者在2和3兩步驟的過程中拖曳tableview,立刻就會奔潰。

分析了一下原因。當我清除NSArray的時候,tableView不會自動去調用numberOfItemsInSection獲取最新的data個數,這時候如果下拉的話,tableview會去調用cellForItemAtIndexPath獲取一個新的cell,這時候,因為data個數為0,cellForItemAtIndexPath訪問data就會出現數組越界的情況。

於是我想講第二步插在第三步中間,就是說獲取完遠程數據的時候,清除NSArray,然後換上新的網絡數據,然後調一下reloadData刷新。

但是這樣還是會有原來那個bug,在呼叫reloadData之前,NSArray的個數和tableView取得到的numberOfItemsInSection是不一樣的。只是這樣比之前的時間間隔更短一些而已。

請問各路大神,你們是如何更新tableView裡面的資料的。如何做到100%安全呢。

我想大声告诉你我想大声告诉你2757 天前659

全部回覆(1)我來回復

  • 迷茫

    迷茫2017-05-02 09:24:52

    資料只要改變就應該去刷新tableView
    即使是清除內容,做完了也可以刷新一下

    回覆
    0
  • 取消回覆