如何修复表格视图单元格中的重复图像?

时间:2016-01-22 21:45:57

标签: ios uitableview parse-platform

我正在使用Parse的PFQueryTableViewController,我注意到滚动时图像正在重复。我怎么能阻止这个?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object {

    static NSString *CellIdentifier = @"Item";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    PFObject *photoObject = [object objectForKey:@"toObject"];

    PFQuery *query = [PFQuery queryWithClassName:@"Photo"];
    [query getObjectInBackgroundWithId:photoObject.objectId block:^(PFObject *gameScore, NSError *error) {
        // Do something with the returned PFObject in the gameScore variable.

        PFImageView *photo = (PFImageView *)[cell viewWithTag:1];
        photo.file = [gameScore objectForKey:@"image"];
        [photo loadInBackground:^(UIImage * _Nullable image, NSError * _Nullable error) {

        }];

    }];


    return cell;
}

1 个答案:

答案 0 :(得分:0)

您的查询以异步方式返回图像,并将其放在完成块中捕获的单元格对象中。没有保证,当查询返回时,您的单元格对象还没有被tableview重用到另一行。

此外,在后台线程中更新UI组件(我怀疑完成块将是)也是UI问题的来源。

解决此问题的一种方法是捕获索引路径(而不是单元格)并在完成块中使用tableView.cellForRowAtIndexPath()以确保您使用图像更新正确的单元格。您还应该将此调度发送到主线程,以避免与其他更新冲突(例如让您尝试更新的单元格成为另一个重用的受害者 - 不太可能但不是不可能)