滚动iOS Swift时图像无法正确显示

时间:2016-05-03 11:52:42

标签: ios swift uitableview

在我的应用中,我有tableview部分。问题出在图片上。当用户滚动列表时,显示的图像不正确。我知道问题是因为回收,但我仍然找不到任何解决方案。

代码

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;

    }

请知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这是因为细胞正在重复使用。每次重复使用时,单元格都会启动请求。由于它们是异步的,因此无法确定请求完成的顺序。请求完成并设置图像后,单元格将被重用,并在当前请求正在进行时显示上一个图像。

不推荐使用

NSURLConnection,您应该使用NSURLSession。您需要缓存这些图像,而不是每次显示时都启动请求。每次重复使用单元格时,您还需要清除图像,以便在显示时不显示上一个图像。

有许多开源库可以完成这些工作,并且经过了数百万用户的极好测试和使用。除非对项目的要求很高,否则不利用它们是愚蠢的。

https://github.com/pinterest/PINRemoteImage

https://github.com/rs/SDWebImage

https://github.com/Alamofire/AlamofireImage