以下で 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;
}