2016-08-27 5 views
0

Существует tableView. Он берет данные из массива (cellMap). В viewDidLoad данные добавляются в массив.Загрузить изображения в фоновом режиме

[self.cellMap addObject:[CellModel initWithTitle:title 
              price:price 
              image:getProductImageByImgURL:url 
]; 

В методе cellForRowAtIndexPath данные берутся из массива:

CellModel *model = self.cellMap[indexPath.row]; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:configurator.identifier forIndexPath:indexPath]; 

cell.title = model.title; 
cell.price = model.price; 
cell.image = model.image; 

return cell; 

Метод для загрузки изображения в фоновом режиме:

- (UIImage *)getProductImageByImgURL:(NSString *)url { 
    __weak typeof(self)weakSelf = self; 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     __strong typeof(self)strongSelf = weakSelf; 

     strongSelf.productImage = [UIImage loadImage:url]; 
    }); 
    return self.productImage; 
} 

Где self.productImage является @property (strong, nonatomic) UIImage *productImage;

Результат - все ячейки имеют последнее загруженное изображение. В чем проблема?

ответ

0

Я думаю, ваша проблема является результатом этого,

strongSelf.productImage = [UIImage loadImage:url]; 

Вы можете попытаться использовать временную переменную. И сделайте это,

UIImage * tempImage = [UIImage loadImage:url]; 
+0

Не работает .. 8 ( – Gikas