【发布时间】:2015-11-14 23:05:10
【问题描述】:
我有一个在单元格中显示图像的 tableView。大多数时候会显示正确的图像,但偶尔会显示错误的图像(通常是快速向下滚动 tableView 时)。我异步下载图像并将它们存储在缓存中。找不到其他可能导致问题的原因?下面是代码:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// try to reuse cell
let cell:CustomCell = tableView.dequeueReusableCellWithIdentifier("DealCell") as CustomCell
// get the venue image
let currentVenueImage = deals[indexPath.row].venueImageID
let unwrappedVenueImage = currentVenueImage
var venueImage = self.venueImageCache[unwrappedVenueImage]
let venueImageUrl = NSURL(string: "http://notrealsite.com/restaurants/\(unwrappedVenueImage)/photo")
// reset reused cell image to placeholder
cell.venueImage.image = UIImage(named: "placeholder venue")
// async image
if venueImage == nil {
let request: NSURLRequest = NSURLRequest(URL: venueImageUrl!)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!,data: NSData!,error: NSError!) -> Void in
if error == nil {
venueImage = UIImage(data: data)
self.venueImageCache[unwrappedVenueImage] = venueImage
dispatch_async(dispatch_get_main_queue(), {
// fade image in
cell.venueImage.alpha = 0
cell.venueImage.image = venueImage
cell.venueImage.fadeIn()
})
}
else {
}
})
}
else{
cell.venueImage.image = venueImage
}
return cell
}
【问题讨论】:
-
为什么每次都重置重用的单元格图像?仅当未找到
venueImage时才需要重置。 -
让 unwrappedVenueImage = currentVenueImage 不解开 currentVenueImage。展开是“如果让...”
-
使用 AsyncImageView 而不是 UIImageView 它会自动提供缓存,你可以通过设置 setImageWithURL 来使用它,通过你的 URL,它也有微调器,所以不需要任何占位符图像。
-
您使用的是哪个 swift 版本?
标签: ios swift uitableview uiimageview