最近突然發現之前寫的iOS應用在刷新的時候偶爾會跑潰。
檢查了一下程式碼發現一個bug。導致bug的步驟如下:
用戶下拉tableview進行刷新。
將保存資料的NSArray清除。
取得網路數據,然後再填入NSArray。
正常情況下這樣做並沒有問題。
但是,如果使用者在2和3兩步驟的過程中拖曳tableview,立刻就會奔潰。
分析了一下原因。當我清除NSArray的時候,tableView不會自動去調用numberOfItemsInSection獲取最新的data個數,這時候如果下拉的話,tableview會去調用cellForItemAtIndexPath獲取一個新的cell,這時候,因為data個數為0,cellForItemAtIndexPath訪問data就會出現數組越界的情況。
於是我想講第二步插在第三步中間,就是說獲取完遠程數據的時候,清除NSArray,然後換上新的網絡數據,然後調一下reloadData刷新。
但是這樣還是會有原來那個bug,在呼叫reloadData之前,NSArray的個數和tableView取得到的numberOfItemsInSection是不一樣的。只是這樣比之前的時間間隔更短一些而已。
請問各路大神,你們是如何更新tableView裡面的資料的。如何做到100%安全呢。