当 loadImage 的回调块在下面运行时,表格单元格可能已被重用。所以应用到“imageView”的图像与这个重用单元格无关,它是旧单元格的图像。
如果我为每个具有图像的单元格设置唯一的标识符,问题就会消失。但这会导致性能不佳,结果很多。
我可以以某种方式将相同的重用标识符与回调块一起使用,并使图像出现在正确的单元格中吗?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSDictionary *place;
PlaceTableViewCell *cell; // UITableViewCell subclass
NSString *identifier = @"PlaceTableViewCell";
if (cell == nil) {
NSArray *objects;
objects = [[NSBundle mainBundle] loadNibNamed:@"PlaceTableViewCell" owner:self options:nil];
for(id object in objects) {
if([object isKindOfClass:[PlaceTableViewCell class]]) {
cell = (PlaceTableViewCell *)object;
break;
}
}
}
UIImageView *imageView;
if((imageView = (UIImageView*)[cell viewWithTag:1])) {
NSString *filename;
int placeImageId = 0;
place = [places objectAtIndex:indexPath.row];
if(place) {
placeImageId = [[d objectForKey:@"placeImageId"] intValue];
if(placeImageId) {
[[RestAPIConnector sharedInstance] loadImage :placeImageId :@"thumb" :^(NSString *response){
NSDictionary *image = [response JSONValue];
if ([image objectForKey:@"img"]) {
NSString *b64Img = [image objectForKey:@"img"];
UIImage *ui = [UIImage imageWithData:[Base64 decode:b64Img]];
imageView.image = ui;
}
}];
}
}
}
return cell;
}