2016-07-05 15 views
1

Ich stecke mit einem Problem fest. Ich möchte eine Tabellenansicht mit etwas Text und einem Profilbild füllen, das sich ändern kann, ich benutze diese Funktion dafür.Wie Cache mit Haneke Swift Swift löschen?

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell: CommonCellView! 
    cell = self.tableView.dequeueReusableCellWithIdentifier("CommonCellView") as! CommonCellView 
    cell.nameLabel.text = self.userCollection[indexPath.row].display_name 
    cell.companyLabel.text = self.userCollection[indexPath.row].user_organisation 
    cell.profileImage.hnk_setImageFromURL(NSURL(string: self.userCollection[indexPath.row].profile_picture)!) 
    self.makeImageViewCircular(cell.profileImage.layer, cornerRadius: cell.profileImage.frame.height) 
    cell.profileImage.clipsToBounds = true 

    return cell 
} 

nichts, um hier zu überraschen. Aber wenn ich mein eigenes Profilbild ändere, dann sende ich es an die API und revist diese Funktion es zeigt das zwischengespeicherte Bild an. Also habe ich mir gedacht, ich könnte etwas anderes ausprobieren, warum nicht alle Bilder für jede Zelle mit Alamofire bekommen.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell: CommonCellView! 
    cell = self.tableView.dequeueReusableCellWithIdentifier("CommonCellView") as! CommonCellView 
    cell.nameLabel.text = self.userCollection[indexPath.row].display_name 
    cell.companyLabel.text = self.userCollection[indexPath.row].user_organisation 
    cell.profileImage.image = UIImage() 
    //getting the cell image 
    Alamofire.request(.GET, self.userCollection[indexPath.row].profile_picture) 
     .response {(request, response, avatarData, error) in 

         let img = UIImage(data: avatarData!) 
         cell.profileImage.image = img 

    } 
    self.makeImageViewCircular(cell.profileImage.layer, cornerRadius: cell.profileImage.frame.height) 
    cell.profileImage.clipsToBounds = true 

    return cell 
} 

das funktioniert bis zu einem Punkt, wo Benutzer scrolles sehr schnell das Bild eines anderen Benutzers angezeigt wird, bis die Anforderung erfüllt wird. Okey so machen Sie das etwas anders und verwenden Sie ein Array für die Bilder. Das habe ich auch versucht. aber weil es asynchron ist, würden die Bilder in der falschen Reihenfolge in das Array gehen. Also zurück zu HanekeSwift. Ich habe die Dokumentation gelesen und gesehen, dass ich einen Cache auf der Festplatte hatte, aber ich konnte ihn nicht löschen oder löschen.

den Cache löschen i auch versucht. NSURLCache.sharedURLCache() removeAllCachedResponses()

aber ich etwas nicht tun. Es funktioniert in der Alamofire-Situation, aber es ist auch keine gute Lösung.

Ich möchte hanekeSwift verwenden, weil HanekeSwift schnell genug ist, um alle Bilder zu erhalten. aber ich möchte den Cache jedes Mal löschen, wenn der contoller lädt.

Irgendwelche Vorschläge würden geschätzt!

Cees

+1

Haben Sie versucht: 'Shared.imageCache.removeAll()'? – riik

Antwort

0

fand ich das Problem.

Zuerst lief ich eine ältere Version des Pods. Nach der Aktualisierung könnte ich die Funktion verwenden.

Shared.imageCache.removeAll()

nach haneke in den Controller zu importieren.

das letzte Stück Code sah so aus. func Tableview (Tableview: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell: CommonCellView! 
    cell = self.tableView.dequeueReusableCellWithIdentifier("CommonCellView") as! CommonCellView 
    cell.nameLabel.text = self.userCollection[indexPath.row].display_name 
    cell.companyLabel.text = self.userCollection[indexPath.row].user_organisation 
    cell.profileImage.image = UIImage() 
    //getting the cell image 
    cell.profileImage.hnk_setImageFromURL(NSURL(string: self.userCollection[indexPath.row].profile_picture)!) 
    //deleting it from cache 
    Shared.imageCache.removeAll() 
    self.makeImageViewCircular(cell.profileImage.layer, cornerRadius: cell.profileImage.frame.height) 
    cell.profileImage.clipsToBounds = true 

    return cell 
} 

es jetzt funktioniert, aber eine andere Zelle wird gefüllt, um die Cache die ganze Zeit zu entfernen scheint ein wenig übertrieben.

+0

HINWEIS: Sie können die Funktion in viewdidload aufrufen. Das könnte eine bessere Lösung sein. – Cees