2017-10-10 1 views
0

Ich habe eine Tabelle in swift. Wenn ich in der Tabellenansicht auf und ab blättern, wird die getImageForCell-Funktion erneut ausgeführt, obwohl das Bild bereits geladen wurde. Gibt es einen Weg dafür? Unten ist mein Code.Swift TableView macht mehrere Netzwerkanfragen für Bilder

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

„Gibt es eine Möglichkeit für das nicht passieren“ Was ist eine Alternative, die Sie passieren wollen? –

+0

Er meint, er möchte nicht, dass das Bild jedes Mal heruntergeladen werden muss, sondern ein zwischengespeichertes Bild verwendet, um den Netzwerkanruf zu vermeiden. – crashlog

+0

überprüfen Sie diesen Link: https://stackoverflow.com/questions/45316099/nscache-doesnt-work-with-all-images-when-loading-for-the-first-time – 3stud1ant3

Antwort

0

Dies ist sowohl auf das Bild nicht Cachen, und die Wiederverwendung auch nicht in der Zelle - in der Ansicht Sie die Zelle jedes Mal neu erstellen - das wäre das Bild Problem nicht speziell beheben, wird aber die Leistung verbessern. Meine Lieblings-Cache-Image-Erweiterung ist Kingfisher (keine Zugehörigkeit), obwohl Alamofire auch zum Zwischenspeichern von Bildern verwendet werden kann.

https://github.com/onevcat/Kingfisher