Зацикливание через uiimageview в customCell

Привет, у меня есть таблица продуктов и представление сведений о продукте для каждого продукта. У меня есть много изображений, которые загружаются и кэшируются на диске и в памяти при каждом выборе пользователем продукта для проверки его деталей. Я пытаюсь получить кешированные изображения и настроить их для моего четырех UIImageView внутри настраиваемой ячейки в UITableViewController. Я не могу установить изображения, хотя я могу зарегистрировать их через функцию NSLog() Я использую этот код:

    int index = 0;
    int indexOfImages = 1;
    self.imageCache = [[SDImageCache alloc] initWithNamespace:@"menuImage"];
   for ( UIImageView *currentImageView in cell.contentView.subviews)
    {
        NSLog(@"the imageindex is: %d",indexOfImages);
        NSLog(@"the index is: %d",index);
        NSLog(@"the count is: %lu",(unsigned long)[self.currentProduct.mirsaProductUrlImage count]);
        if (index < [self.currentProduct.mirsaProductUrlImage count] ) {
             [self.imageCache queryDiskCacheForKey:self.currentProduct.mirsaProductUrlImage[indexOfImages]  
    done:^(UIImage *image, SDImageCacheType cacheType) {
                if (image) {
                   currentImageView.image =  image;
                }
            }];
            indexOfImages++;
            index++;
         }
         else
        {
            break;
        }
    }

и если я попытаюсь изменить путь цикла к этому

 for ( UIImageView *currentImageView in self.tableView.subViews)

я получил эту ошибку UITableViewWrapperView setImage:]: непризнанный селектор, отправленный экземпляру

Я просто хочу знать, не ошибаюсь ли я, что я имею в виду, что я не могу связаться с ними через этот цикл или что происходит?

Ответ 1

Вы должны изменить цикл как:

 for ( UIView *currentView in cell.contentView.subviews)
   {
      if([currentView isKindOfClass:[UIImageView class]])
      {
           // here Do All the stuff for imageViews
      }
   }

Сделайте все это в cellForRowAtIndexPath и для изменения изображения imageView возьмите слабый экземпляр imageView следующим образом:

__weak UIImageView *weakImage = currentImageView;
 [self.imageCache queryDiskCacheForKey:self.currentProduct.mirsaProductUrlImage[indexOfImages]  
    done:^(UIImage *image, SDImageCacheType cacheType) {
                if (image) {
                    weakImage.image =  image;
                }
 }];

Ответ 2

Я думаю, что это не сработает с вашим кодом. а

для (UIImageView * currentImageView в cell.contentView.subviews)

эта строка попытается преобразовать все подъязыки вашего содержимого содержимого в UIImageview.

Вы можете установить тег на все ваши UIImageview, а затем напрямую обращаться к ним с помощью тега, например

cell.contentView.viewWithTag(yourtag)

и установите для него образ