UITableView重复单元格如何防止它?迅速

时间:2015-03-13 12:22:35

标签: ios uitableview swift parse-platform

我有单元格的自定义类,我有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
    }        

2 个答案:

答案 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 {

}