[swift — 筆記] 為什麼我的 Tableview cell 沒更新

那個我以為的朋友

DORA
多多設計
2 min readMar 4, 2018

--

現實中我只玩 Switch

swift 筆記,這個系列都會是我接案子時遇到的一些問題,希望能偶然的幫助到某個也在迷茫的人。

不知道大家有沒有這個經驗,剛剛認識了新朋友,不知怎麼地突然變成非常要好。你總感覺他懂你,你也了解他。但在經歷過種種事情、發現了某些事實,你才會醒過來,原來你並不真的了解他,而他也不曾真的想要深入認識你。

今天要講的就是這樣子的一個 Bug。

問題:tableview.reload 後,畫面資料正常,可是當我取出 cell 時,cell 裡的資料仍然是舊的:

事情是這樣子的,在做完 request 從 api 取得資料後我用 tableview.reload 更新 cell 裡面的資料內容。畫面完美更新沒有錯誤,但是當我想使用 didSelectRowAt 讓使用者可以取得 cell 的內容。但是怎麼印出來的值都是舊的啊!!

取得 cell 的程式碼

解決方法:

問題就出在 dequeueReusableCell 這個方法上,簡單來說 cell 有個非常強大的重(ㄔㄨㄥˊ)用機制,他會先把你的 cell 放在可重複使用的佇列中,只有當 cell 出現在畫面時,才會把 cell 擺進tableview,可以減少畫面渲染,避免卡頓的情形。就是因為這個功能,所以你在使用 dequeueReusableCell 時,並不會拿到最新(realtime)的 cell,而是先前預存在佇列中的 cell ,所以我們必須換個寫法。

真的取得最新 cell 的程式碼

結語

這是第一次寫 swift 的文章,如果運氣好有繼續接到案子的話,這個系列應該會繼續下去。另外 swift 真的是那位我自以為要好的朋友,所以如果我有哪裡誤會他的話,請大家跳出來幫他解釋一下吧。

請大家開心就幫我拍拍手。

--

--

DORA
多多設計

高興的就 Coding,不開心就 Drawing 。這輩子的目標是靠做自己想做的事情賺到錢。