2016-07-04 5 views
0

Ich habe ein Problem im Zellbild. Ich beschreibe es im Nachhinein.
Ein Bildschirm mit einer Tabelle mit 1000 Zellen.
Jede Zelle besteht aus a) Bild b) Etiketten.
Die Bild- und Etikettendaten stammen von json.
Mit Hilfe von AFNetwork ich JSON Geldbörse und binden Sie Etikett und Bild. Das Problem ist im Bild. Die Etiketten sind perfekt bindbar. Von json kommt auch die Bild-URL korrekt. Zeigen Sie jedoch vorherige Zellenbilder an, wenn das Scrollen gestartet wird. 1. Mal beim Scrollen nicht starten alle Bilder werden perfekt angezeigt. Aber nach dem Scrollen Problem starten und zeigen vorherige Zelle Bild.Nach dem Scrollen Tabellenzelle Bild zeigen vorherige Bilder in swift. Obwohl die Bild-URL korrekt angezeigt

Code:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    if self.arrPostImage![indexPath.row] as! String == "" 
    { 
     let cell1: CellNewNoImage = tableView.dequeueReusableCellWithIdentifier("cell2") as! CellNewNoImage 
     return cell1 
    } 
    else 
    { 
     let cell1: CellForMyActivityMainTableView = tableView.dequeueReusableCellWithIdentifier("cell") as! CellForMyActivityMainTableView 
     cell1.title.text = self.arrTitle![indexPath.row] as? String 
     cell1.postDate.text = self.arrPostDate![indexPath.row] as? String 
     cell1.postDescription.text = self.arrPostDescription![indexPath.row] as? String 

     //=========== Problem Start ====================   
     self.arrPostPersonImg![indexPath.row] = self.arrPostPersonImg![indexPath.row].stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())! 
     let imgPath = self.arrPostPersonImg![indexPath.row] 
     let url12 = NSURL(string:imgPath as! String) 
     getDataFromUrl(url12!) { (data, response, error) in 
     dispatch_async(dispatch_get_main_queue()) {() -> Void in 
      guard let data = data where error == nil else { return } 
      cell1.postPersonImg.image = UIImage(data: data) 
     } 
    } 
    self.arrPostImage![indexPath.row] = self.arrPostImage![indexPath.row].stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())! 
    let imgPath2 = self.arrPostImage![indexPath.row] 
    let url122 = NSURL(string:imgPath2 as! String) 
    if let url = NSURL(string:imgPath2 as! String) { 
    if let data = NSData(contentsOfURL: url) { 
     cell1.postImage.image = UIImage(data: data) 
    }   
} 
return cell1 
} 

}

func getDataFromUrl(url:NSURL, completion: ((data: NSData?, response: NSURLResponse?, error: NSError?) -> Void)) 
{ 
    NSURLSession.sharedSession().dataTaskWithURL(url) 
    { (data, response, error) in 
     completion(data: data, response: response, error: error) 
    }.resume() 
} 
+0

Sie möchten vielleicht einen Blick auf http://stackoverflow.com/questions/12381991/ios-cache-policy –

Antwort

0

Sie sollen das vorherige Bild aus der Zelle entfernen, bevor die neuen Laden.

Ich habe eigentlich ein Pod-Cache für Bilder zu verwalten, so dass Sie die gleichen Bild mehrmals nicht herunterladen: https://cocoapods.org/?q=cmimageloader

1

Wenn Sie Ihre postPersonImage mit URL eingestellt, dass Bildansicht Bild nil vor Ihrem Bildpfad setzen und versuche. wie

cell1.postPersonImg.image = nil 
Verwandte Themen