gpt4 book ai didi

ios - AFNetworking 的 setImageWithURLRequest 在滚动后将图像设置在错误的单元格中(iOS、Swift)

转载 作者:搜寻专家 更新时间:2023-10-31 22:23:44 25 4
gpt4 key购买 nike

我将表与 dequeueReusableCellWithIdentifierafnetworking+uiimageview 一起使用。我的一些细胞有图像,有些没有。如果我在加载图像之前滚动表格,成功 block 会将图像放入重复使用的错误单元格中。例如图像在单元格 #2 中,但在滚动后它出现在单元格 #8 中,因为当时 #8 位于第二个位置。是否可以将 setImageWithURLRequestdequeueReusableCellWithIdentifier 一起使用?

我的代码:

    let cell = tableView.dequeueReusableCellWithIdentifier("simpleCell", forIndexPath: indexPath) as UITableViewCell!
cell.textLabel.text = fields[indexPath.row]["name"] as String
cell.imageView.image = nil
if let image = fields[indexPath.row]["image"] as? String {
if (image != "") {
let image_url = NSURL(string: image)
let url_request = NSURLRequest(URL: image_url)
let placeholder = UIImage(named: "no_photo")
cell.imageView.setImageWithURLRequest(url_request, placeholderImage: placeholder, success: { [weak cell] (request:NSURLRequest!,response:NSHTTPURLResponse!, image:UIImage!) -> Void in
if let cell_for_image = cell {
cell_for_image.imageView.image = image
cell_for_image.setNeedsLayout()
}
}, failure: { [weak cell]
(request:NSURLRequest!,response:NSHTTPURLResponse!, error:NSError!) -> Void in
if let cell_for_image = cell {
cell_for_image.imageView.image = nil
cell_for_image.setNeedsLayout()
}
})
}
}
return cell

抱歉,如果我的问题与另一个问题重复。我发现了很多类似的问题,但我还没有找到解决方案。我尝试添加重新加载

tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)

进入我的成功 block ,但它没有帮助。

更新:我还注意到,在我所有的单元格都有图像的情况下,我没有这个问题。如果我理解正确,原因是:当尝试请求新图像时,AFNetworking 正在中止先前对同一单元格的请求。但如果我在单元格中没有图像,它就不会中止。如何手动完成?

最佳答案

当表格 View 重用单元格时,图像下载仍在后台处理。当它完成时,cell 指向一个具有不同内容的重复使用的单元格。

你有两个选择:

  1. cell.imageView.image = nil 之后的 ImageView 上调用 cancelImageRequestOperation
  2. 在完成处理程序中,不要引用cell;而是使用您的数据模型从 TableView 中请求正确的单元格。

关于ios - AFNetworking 的 setImageWithURLRequest 在滚动后将图像设置在错误的单元格中(iOS、Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25569971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com