Próbuję asynchronizować ładowanie obrazów w komórce FriendsTableView (UITableView). Obrazy ładują się dobrze, ale kiedy przewijam stół, obrazy zmieniają się kilka razy, a złe obrazy są przypisywane do niewłaściwych komórek.Swift Obrazy zmieniają się w niewłaściwe obrazy podczas przewijania po ładowaniu obrazu asynchronicznego do UITableViewCell
Próbowałem wszystkich metod, jakie można znaleźć w StackOverflow, w tym dodawanie znacznika do surowca, a następnie sprawdzanie go, ale to nie zadziałało. Sprawdzam również komórkę, która powinna zaktualizować się za pomocą indeksu IndexPath i sprawdź, czy komórka istnieje. Nie mam pojęcia, dlaczego tak się dzieje.
Oto mój kod:
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
}
Próbowałem użyć biblioteki AlamofireImage, która również powinna to rozwiązać, ale nie mogłem jej uruchomić. Miało to taki sam wpływ na obrazy. Czy możesz wyjaśnić, z których metod powinienem korzystać z biblioteki Kingfisher? – BenNov
Dodałem przykładowy kod do Twojego przypadku. To powinno działać dobrze. –
w jaki sposób deklarujesz 'imageView'? – BenNov