我的细胞图像有问题。我在下面描述它 具有包含1000个单元格的表格的屏幕 每个单元格由a)图像b)标签组成 图像和标签数据来自json 通过使用AFNetwork我钱包json并绑定标签和图像。问题出在图像上。标签完美绑定。从json,图像网址也正确。但是在滚动开始时显示先前的单元格图像。 第一次滚动无法启动所有图像都完美显示。但滚动问题开始后显示前一个单元格图像。
代码:
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 :(得分:1)
使用URL设置postPersonImage时 在图像路径之前将图像视图图像设置为nil并尝试。像
cell1.postPersonImg.image = nil
答案 1 :(得分:0)
在加载新图像之前,您应该从单元格中删除上一张图像。
我实际上制作了一个Pod来管理图像缓存,因此您不会多次下载相同的图像:https://cocoapods.org/?q=cmimageloader