我正在使用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;
}
答案 0 :(得分:0)
您的查询以异步方式返回图像,并将其放在完成块中捕获的单元格对象中。没有保证,当查询返回时,您的单元格对象还没有被tableview重用到另一行。
此外,在后台线程中更新UI组件(我怀疑完成块将是)也是UI问题的来源。
解决此问题的一种方法是捕获索引路径(而不是单元格)并在完成块中使用tableView.cellForRowAtIndexPath()以确保您使用图像更新正确的单元格。您还应该将此调度发送到主线程,以避免与其他更新冲突(例如让您尝试更新的单元格成为另一个重用的受害者 - 不太可能但不是不可能)