我有单元格的自定义类,我有UItableView
显示单元格的元素,如标签和图像,我也使用parse.com作为应用程序的后端,当我刷新表格时,最后一个单元格会重复第一个单元格,所以我一直在寻找防止重复单元格的解决方案,这是我cellForRowAtIndexPath
的代码。
提前感谢您的帮助。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var myCell:Cell = tableView.dequeueReusableCellWithIdentifier("myCell") as Cell
// Configure the cell...
myCell.label1.text = Array1[indexPath.row]
myCell.label2.text = Array2[indexPath.row]
myCell.label3.text = Array3[indexPath.row]
myCell.label4.text = Array4[indexPath.row]
myCell.postedImage.layer.cornerRadius = myCell.postedImage.frame.size.width / 2
myCell.postedImage.clipsToBounds = true
//get the image from parse
imagefiles[indexPath.row].getDataInBackgroundWithBlock{(imageData: NSData!, error:NSError!) -> Void in
if error == nil {
let image = UIImage(data: imageData)
myCell.postedImage.image = image
}
}
}
return myCell
}
答案 0 :(得分:4)
此代码存在两个问题:
1)由于单元格是缓存的,因此您获取的最后一个单元格可能具有从前一个单元格配置的数据。结果是它将显示旧单元格中的数据和图像。
可以通过将myCell.postedImage.image
初始化为nil
或某个占位符图片来解决此问题。
2)您正在为缓存的单元格执行异步请求。这意味着到``完成时,myCell
可以重新用于另一行。因此,您现在将图像设置在不同的单元格上。这也会导致您所描述的混乱结果。
答案 1 :(得分:2)
好了几天工作之后,我发现了问题在哪里并修复了它,它不是来自cellForRowAtIndexPath函数,它来自与parse通信的代码,我添加了一个代码来防止重复的单元格所有元素属于单元格,因此我的代码看起来像这样
Feed.findObjectsInBackgroundWithBlock{ (objects: [AnyObject]!, error: NSError!) -> Void in
//here is the fix i have done
self.Array1.removeAll(keepCapacity: true)
self.Array2.removeAll(keepCapacity: true)
self.Array3.removeAll(keepCapacity: true)
self.Array4.removeAll(keepCapacity: true)
self.Array5.removeAll(keepCapacity: true)
if error == nil {
} else {
}