私はそれにUIImageViewを持つUITableViewを持っています。これらのimageViewsでは、私はサーバーから画像をダウンロードして表示しています。問題は、私がUITableViewをスクロールすると、最初に別のセルのイメージを表示し、直後(2-3秒後)にセルのimageViewを適切なイメージに更新するということです。なぜUITableViewCellは前回の値を表示した直後に自己を更新するのですか?
どうすれば修正できますか?
extension UIImageView {
func getDataFromUrl(url:String, completion: ((data: NSData?) -> Void)) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)!) { (data, response, error) in
completion(data: NSData(data: data!))
}.resume()
})
}
func downloadImage(url:String){
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
self.getDataFromUrl(url) { data in
dispatch_async(dispatch_get_main_queue()) {
self.contentMode = UIViewContentMode.ScaleAspectFill
self.image = UIImage(data: data!)
}
}
})
}
}
として私のcellForRowAtIndexPath
にこれらの拡張機能を使用します:私はそのように、背景とメインスレッドのミックスを使用しようとした
cell.coverImage.downloadImage("\(credentials.postCoverURL)\(recentNews[indexPath.row].image)")
が、それは私を助けていません。以前と同じように動作します。私は間違っている?可能であれば、答えに説明(説明)をしてください。それはより便利になります!ありがとう!実際にあなたのコード内で何が起こっている
UPDATE
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: newsCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! newsCell
cell.coverImage.downloadImage("\(credentials.postCoverURL)\(recentNews[indexPath.row].image)")
return cell
}
なし、同じこと –
は、あなたが質問のアップデートでcellForRowAtIndexPath –
一見のコードを貼り付けることができ、してください –