2017-10-10 4 views
0

J'ai une table rapide. Chaque fois que je fais défiler le tableau vers le haut et le bas, il exécute à nouveau la fonction getImageForCell même si l'image a déjà été chargée. Y a-t-il un moyen pour que cela ne se produise pas? Voici mon code.Swift TableView effectuer des requêtes réseau multiples pour les images

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "ReviewTableViewCell", for: indexPath) as! ReviewTableViewCell 

    let review = json[reviewType][indexPath.row] 
    cell.nameLabel.text = review[userType]["name"].stringValue 
    cell.reviewLabel.text = review["message"].stringValue 
    cell.dateLabel.text = review["created_at"].stringValue 
    cell.ratingStars.rating = Double(review["rating"].intValue) 
    getImageForCell(url: review[userType]["photo_url"].stringValue, cell: cell) 

    return cell 
} 

func getImageForCell(url: String, cell: ReviewTableViewCell) { 
    Alamofire.request(url).responseImage { response in 
     if let downloadedImage = response.result.value { 
      print("downloaded image \(downloadedImage)") 
      DispatchQueue.main.async { 
       cell.profileImageView.image = downloadedImage 
      } 
     } 
    } 
} 
+0

« Est-il possible pour que cela ne se produise » Qu'est-ce qu'une alternative que vous souhaitez arriver? –

+0

Il veut dire qu'il ne veut pas l'image d'avoir à télécharger à chaque fois, mais d'utiliser une image en cache pour éviter l'appel réseau. – crashlog

+0

vérifier ce lien: https://stackoverflow.com/questions/45316099/nscache-doesnt-work-with-all-images-when-loading-for-the-first-time – 3stud1ant3

Répondre

0

Cela est dû à la fois pas en tant que cache l'image, et pas non plus la réutilisation de la cellule - à votre avis vous recréez la cellule à chaque fois - ce ne serait pas spécifiquement résoudre le problème d'image, mais d'améliorer les performances. Mon extension d'image de cache préférée est kingfisher (aucune affiliation), bien que alamofire puisse être utilisé pour mettre en cache des images aussi.

https://github.com/onevcat/Kingfisher