单元格中的每个单元格都会加载和映像以及来自parse.com的一些文本 但是当我滚动它时,在加载的图像和错误的用户名之前显示错误的图像。 timeago和消息正常工作。
我已经阅读了有关prepareForReuse()方法的内容,但它无效。
有什么想法吗?
的UITableViewController:
let cell = tableView.dequeueReusableCellWithIdentifier("chatcell", forIndexPath: indexPath) as? PTATableViewCell
cell.delegate = self
cell.setPanGesture(.LeftToRight, mode: .Exit, color: UIColor.whiteColor(), view: viewWithImage(named: "infostart"))
cell.leftToRightAttr.triggerPercentage = 0.4
cell.leftToRightAttr.rubberbandBounce = false
cell.leftToRightAttr.viewBehavior = .DragWithPan
let targetObject = rooms[indexPath.row] as PFObject
let targetUser = users[indexPath.row] as PFUser
let mm = rooms[indexPath.row]
cell.mesaj.text = mm.objectForKey("Message") as! String
cell.timeAgo.text = "\(targetObject.updatedAt!.formattedAsTimeAgo())"
let userget = PFUser.query()
userget!.whereKey("objectId", equalTo: targetUser.objectId!)
userget!.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if error == nil {
if let fUser = objects!.last as? PFUser {
let namee = fUser.objectForKey("name") as! String
let agee = fUser.objectForKey("age") as! Int
cell.nameUser.text = "\(namee), \(agee)"
if let pica = fUser.objectForKey("dpSmall") as? PFFile {
pica.getDataInBackgroundWithBlock({ (data:NSData?, error:NSError?) -> Void in
if error == nil {
cell.userdp.image = UIImage(data: data!)
cell.userdp.layer.borderColor = colorText.CGColor
circleBorder(cell.userdp)
}
})
Customviewcell:
public override func prepareForReuse() {
super.prepareForReuse()
nameUser.text = "Loading..."
userdp.image = nil
timeAgo.text = nil
mesaj.text = nil
likedtext.text = nil
removeSwipingView()
stateOptions = .None
leftToRightAttr = PTATableViewItemStateAttributes()
rightToLeftAttr = PTATableViewItemStateAttributes()
}
答案 0 :(得分:0)
表视图中的单元格被重用。由于您在后台获取新图像和用户名,因此将显示该单元的先前内容(正在重复使用),直到获取并替换新内容为止。注意消息和时间是如何同步在单元格上设置的(在这种情况下,不在findObjectsInBackgroundWithBlock
回调中),这就是它工作的原因。
答案 1 :(得分:0)
似乎PFQuery有一种取消操作的方法。 https://parse.com/docs/ios/api/Classes/PFQuery.html#/c:objc(cs)PFQuery(im)cancel
试试这个。 将查询定义为PTATableViewCell的属性
let userget = PFQuery?
并在做另一个之前取消操作。这样的事情:
if cell.userget != nil {
cell.userget.cancel()
}
cell.userget = PFUser.query()
cell.userget!.whereKey("objectId", equalTo: targetUser.objectId!)
...