[請益] cell需要網路載圖,怎麼用才順

看板MacDev作者 (RIN)時間6年前 (2017/07/09 21:55), 6年前編輯推噓10(10021)
留言31則, 11人參與, 最新討論串1/1
最近遇到api會回傳圖片網址 我要再把他放在cell的imageVIew上 目前問題是,快速滑動停止時, 圖片會很明顯的從別張圖,變回正確的圖 復用?單純網路問題還是兩者都有? 不知道各位前輩怎麼解決這種問題? 下載幾個有用到tableView的感覺沒這麼明顯 目前是想到先下載存起來,如果沒有同名,才下載 或是直接把imageView改成webView 麻煩各位前輩給些建議了 題外話,最近在做另一個功能 但同事給的api要先連1拿到需要的資訊, 在連2而這個2還需要用迴圈跑5種不同的情況 最後才能比對1有2也有的顯示出來,超麻煩的!! 難道就不能直接在2裡把需要的資訊都存入就好嗎 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 115.43.186.170 ※ 文章網址: https://www.ptt.cc/bbs/MacDev/M.1499608524.A.0DD.html

07/09 22:04, , 1F
在tableView:cellForRowAtIndexPath:裡面要記得重置cell的
07/09 22:04, 1F

07/09 22:04, , 2F
所有內容
07/09 22:04, 2F

07/09 22:13, , 3F
至於cell抓圖的問題 我自己通常都是準備一個NSCache放圖
07/09 22:13, 3F

07/09 22:14, , 4F
cell載入的時候先檢查cache 沒有就先顯示loading 然後抓圖
07/09 22:14, 4F

07/09 22:15, , 5F
圖抓完之後丟進cache 再通知tableView reload相關cell
07/09 22:15, 5F

07/09 22:18, , 6F
如果你的圖片很大量的話 可以考慮進一步存進tmp or cache
07/09 22:18, 6F

07/09 22:18, , 7F
資料夾
07/09 22:18, 7F

07/09 22:27, , 8F
如果不想自己搞圖片下載跟cache,可以找第三方,pinima
07/09 22:27, 8F

07/09 22:27, , 9F
ge
07/09 22:27, 9F

07/09 22:35, , 10F
全部想自己刻的話,可以準備兩個Dictionary
07/09 22:35, 10F

07/09 22:36, , 11F
一個是存圖片,一個是存NSBlockOperation key都是網址
07/09 22:36, 11F

07/09 22:36, , 12F
一開始用key去抓image Dict中有沒有圖片~有->顯示
07/09 22:36, 12F

07/09 22:37, , 13F
沒有的話 在if下先判決operationDict 有沒有值 也沒有
07/09 22:37, 13F

07/09 22:38, , 14F
就用NSBlockOperation去抓圖,完成把image和oper存進dict
07/09 22:38, 14F

07/09 22:39, , 15F
然後dispatchMainQueqe回去set Image
07/09 22:39, 15F

07/09 22:40, , 16F
如果上面oper取出有值,貼上placeholder,img有值 直接貼上
07/09 22:40, 16F

07/09 22:42, , 17F
api回來後,考慮img存到資料夾,最一開始判斷兩次有無值
07/09 22:42, 17F

07/09 22:42, , 18F
都完成了,就是一個簡易版SDWebImage
07/09 22:42, 18F

07/09 22:43, , 19F
有1點寫錯oper存進dict要在NSBlockOperation的block外
07/09 22:43, 19F

07/09 22:49, , 20F
如果cell是custom可以覆寫prepareForReuse中消除imgView
07/09 22:49, 20F

07/09 23:01, , 21F
提醒一下 Apple的文件有提到不建議使用prepareForReuse來
07/09 23:01, 21F

07/09 23:02, , 22F
重置cell的顯示內容 建議在delegate方法裡面重置
07/09 23:02, 22F

07/09 23:08, , 23F
後面那個問題去找寫 API 的同事抱怨啊, 沒什麼好問的 XD
07/09 23:08, 23F

07/10 00:09, , 24F
在prepareForReuse時清除之前的工作。
07/10 00:09, 24F

07/10 01:15, , 25F
好sdwebimage不用嗎....
07/10 01:15, 25F

07/10 01:53, , 26F
sdwebimage不錯用
07/10 01:53, 26F
感謝各位 最後用cache來儲存,就可以了 題外話,做一個不能上架的App 越來越沒動力...... 雖然沒有專案壓力,但有股想換工作的心情 ※ 編輯: RINPE (115.43.186.170), 07/11/2017 21:17:57

07/11 21:54, , 27F
不能上架,那要做什麼用的~@@
07/11 21:54, 27F

07/11 22:44, , 28F
你幾年換了幾個工作啊......
07/11 22:44, 28F

07/11 23:13, , 29F
可能是內部在用的吧
07/11 23:13, 29F

07/12 01:32, , 30F
我做了一大堆不上架的app都是企業內部用的..
07/12 01:32, 30F

07/12 09:17, , 31F
不上架很棒啊,可以使用private api做很酷的功能
07/12 09:17, 31F
文章代碼(AID): #1POZNC3T (MacDev)