問題:tableview.reload 後,畫面資料正常,可是當我取出 cell 時,cell 裡的資料仍然是舊的:
事情是這樣子的,在做完 request 從 api 取得資料後我用 tableview.reload 更新 cell 裡面的資料內容。畫面完美更新沒有錯誤,但是當我想使用 didSelectRowAt 讓使用者可以取得 cell 的內容。但是怎麼印出來的值都是舊的啊!!
解決方法:
問題就出在 dequeueReusableCell 這個方法上,簡單來說 cell 有個非常強大的重(ㄔㄨㄥˊ)用機制,他會先把你的 cell 放在可重複使用的佇列中,只有當 cell 出現在畫面時,才會把 cell 擺進tableview,可以減少畫面渲染,避免卡頓的情形。就是因為這個功能,所以你在使用 dequeueReusableCell 時,並不會拿到最新(realtime)的 cell,而是先前預存在佇列中的 cell ,所以我們必須換個寫法。
結語
這是第一次寫 swift 的文章,如果運氣好有繼續接到案子的話,這個系列應該會繼續下去。另外 swift 真的是那位我自以為要好的朋友,所以如果我有哪裡誤會他的話,請大家跳出來幫他解釋一下吧。
請大家開心就幫我拍拍手。