gpt4 book ai didi

ios - 在异步图像加载到 UITableViewCell 后滚动时,Swift 图像更改为错误的图像

转载 作者:IT王子 更新时间:2023-10-29 05:32:42 29 4
gpt4 key购买 nike

我正在尝试在我的 FriendsTableView (UITableView) 单元格中异步加载图片。图片加载正常,但当我滚动表格时,图片会更改几次,错误的图片会分配给错误的单元格。

我已经尝试了所有可以在 StackOverflow 中找到的方法,包括向原始文件添加标签然后对其进行检查,但没有奏效。我还在验证应使用 indexPath 更新的单元格并检查该单元格是否存在。所以我不知道为什么会这样。

这是我的代码:

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("friendCell", forIndexPath: indexPath) as! FriendTableViewCell
var avatar_url: NSURL
let friend = sortedFriends[indexPath.row]

//Style the cell image to be round
cell.friendAvatar.layer.cornerRadius = 36
cell.friendAvatar.layer.masksToBounds = true

//Load friend photo asyncronisly
avatar_url = NSURL(string: String(friend["friend_photo_url"]))!
if avatar_url != "" {
getDataFromUrl(avatar_url) { (data, response, error) in
dispatch_async(dispatch_get_main_queue()) { () -> Void in
guard let data = data where error == nil else { return }
let thisCell = tableView.cellForRowAtIndexPath(indexPath)
if (thisCell) != nil {
let updateCell = thisCell as! FriendTableViewCell
updateCell.friendAvatar.image = UIImage(data: data)
}
}
}
}
cell.friendNameLabel.text = friend["friend_name"].string
cell.friendHealthPoints.text = String(friend["friend_health_points"])
return cell
}

最佳答案

在 cellForRowAtIndexPath 上:

1) 为您的自定义单元格分配一个索引值。例如,

cell.tag = indexPath.row

2) 在主线程上,在分配图像之前,通过将图像与标签匹配来检查图像是否属于相应的单元格。

dispatch_async(dispatch_get_main_queue(), ^{
if(cell.tag == indexPath.row) {
UIImage *tmpImage = [[UIImage alloc] initWithData:imgData];
thumbnailImageView.image = tmpImage;
}});
});

关于ios - 在异步图像加载到 UITableViewCell 后滚动时,Swift 图像更改为错误的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35958826/

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