當loadImage的回調塊在下面運行時,表格單元可能已被重用。所以圖像被應用到「imageView」與這個重用單元格無關,它是舊單元格的圖像。UITableViewCell使用reuseidentifier給出不想要的結果與回調塊
如果我爲每個具有圖像的單元格設置唯一標識符,問題就會消失。但是這會給很多結果帶來糟糕的表現。
我能以某種方式在回調塊中使用相同的重用標識符並讓圖像在正確的單元格中出現嗎?
- (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;
}