2016-05-03 54 views
1

私のアプリでは、セクションがtableviewにあります。画像に問題があります。ユーザーがリストをスクロールすると、表示されたイメージは適切ではありません。リサイクルの問題があることはわかっていますが、まだ解決策が見つかりません。スクロール時に画像が正しく表示されないSwift

コード

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; 

    } 

レムは、この問題を解決する方法を知ってください!

+0

あなたは 'NSURLConnection'を使用している理由はありますか?あなたは 'NSURLSession'やAlamofireのようなオープンソースを使用できませんか? – dokun1

+0

いいえ、私はライブラリを使いたくない –

答えて

0

これは、セルが再利用されているためです。セルは再利用されるたびにリクエストを開始します。要求が終了する順序は、非同期であるため決定できません。要求が完了してイメージが設定されると、現在の要求が進行中にセルが再利用され、前のイメージが表示されます。

NSURLConnectionは非推奨です。NSURLSessionを使用してください。リクエストが表示されるたびに、これらのイメージをキャッシュする必要があります。また、セルが再利用されるたびにイメージをクリアする必要があるので、表示されたときに前のイメージが表示されません。

これらのことを正確に行い、何百万人ものユーザーが非常によくテストして使用しているオープンソースライブラリが多数あります。それがプロジェクトの難しい要件でない限り、それらを利用しないことは愚かであろう。

https://github.com/pinterest/PINRemoteImage

https://github.com/rs/SDWebImage

https://github.com/Alamofire/AlamofireImage

関連する問題