2016-05-03 9 views
1

In meiner App habe ich tableview mit Abschnitten. Das Problem ist mit Bildern. Wenn der Benutzer die Liste scrollt, sind die angezeigten Bilder nicht korrekt. Ich weiß, dass das Problem wegen der Wiederverwertung ist, aber ich kann immer noch keine Lösung finden.Bilder nicht korrekt angezeigt, wenn gescrollt iOS Swift

-Code

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

     let myeventCell = self.tableView.dequeueReusableCellWithIdentifier("MyEventsTableViewCell", forIndexPath: indexPath) as! MyEventsTableViewCell 

     myeventCell.wedImage.clipsToBounds=true; 

     myeventCell.tag=indexPath.row+indexPath.section; 

     //to download image 
     if wedImgDownload[indexPath.section][indexPath.row] == false 

     { 

//   myeventCell.wedImage.image = UIImage(data: self.webImgData[indexPath.section][indexPath.row]); 

      if let url = NSURL(string: wedImageUrl[indexPath.section][indexPath.row] as String) { 

       let request = NSURLRequest(URL: url) 

       NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { 

        (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in 

        if let imageData = data as NSData? { 

         if myeventCell.tag == indexPath.row+indexPath.section { 

          self.wedImgDownload[indexPath.section].removeAtIndex(indexPath.row) 

          self.wedImgDownload[indexPath.section].insert(true, atIndex: indexPath.row) 

          self.webImgData[indexPath.section].insert(data!, atIndex: indexPath.row) 



          myeventCell.wedImage.image = UIImage(data: imageData); 

         } 

        } 

       } 

      } 

     } 

     else{ 

      if self.webImgData[indexPath.section][indexPath.row] != ""{ 

        if myeventCell.tag == indexPath.row+indexPath.section { 

       myeventCell.wedImage.image = UIImage(data: self.webImgData[indexPath.section][indexPath.row]) 

        } 

      } 



     } 



     return myeventCell; 

    } 

Bitte lass mich wissen, wie dieses Problem zu lösen?

+0

Gibt es einen Grund, warum Sie 'NSURLConnection' verwenden? Kannst du 'NSURLSession' oder etwas Open Source wie Alamofire nicht benutzen? – dokun1

+0

Nein ich möchte nicht Bibliothek verwenden –

Antwort

0

Es ist weil die Zellen wiederverwendet werden. Die Zellen lösen bei jeder Wiederverwendung Anforderungen aus. Die Reihenfolge, in der die Anforderungen enden, kann nicht ermittelt werden, da sie asynchron sind. Sobald eine Anfrage abgeschlossen ist und das Bild gesetzt ist, wird die Zelle wiederverwendet und zeigt das vorherige Bild an, während die aktuelle Anfrage läuft.

NSURLConnection ist veraltet, sollten Sie NSURLSession verwenden. Sie müssen diese Bilder zwischenspeichern, anstatt bei jeder Anzeige eine Anfrage zu starten. Sie müssen das Bild auch jedes Mal löschen, wenn eine Zelle erneut verwendet wird, damit das vorherige Bild bei der Anzeige nicht angezeigt wird.

Es gibt viele Open-Source-Bibliotheken zur Verfügung, die genau diese Dinge tun und sind sehr gut getestet und von Millionen von Benutzern verwendet. Es wäre töricht, sie nicht zu nutzen, es sei denn, es ist eine harte Anforderung an das Projekt.

https://github.com/pinterest/PINRemoteImage

https://github.com/rs/SDWebImage

https://github.com/Alamofire/AlamofireImage

Verwandte Themen