2017-05-01 26 views
10

Witam mam tabelę produktów i widok szczegółów produktu dla każdego produktu Mam wiele zdjęć, które są pobierane i przechowywane w pamięci podręcznej na dysku i pamięci za każdym razem, gdy użytkownik wybiera produkt, aby sprawdzić jego szczegóły Próbuję pobrać buforowany zdjęć i ustawić go dla mojego Four UIImageView wewnątrz niestandardowych komórki w UITableViewController nie jestem w stanie ustawić obrazy chociaż mogę zalogować się je poprzez NSLog() funkcja używam tego kodu:zapętlanie przez uiimageview w customCell

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; 
     } 
    } 

i gdy próbuję zmienić sposób pętli do tego

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

Dostałem ten błąd UITableViewWrapperView setImage:]: selektor nierozpoznany wysłana do instancji

chcę tylko wiedzieć, czy ja Mam na myśli niewłaściwą pętlę, co mam na myśli, że nie jestem w stanie dotrzeć do nich przez tę pętlę lub co się dzieje?

+3

Nie jest jasne, co się faktycznie chce osiągnąć, ale próbuje uzyskać dostęp do subviews swojej tableview prawie na pewno nie jest w porządku droga. Twój wyjątek występuje, ponieważ nie wszystkie elementy podrzędne Twojej tabeli są UIImageViews. – Paulw11

+0

mój przyjaciel próbuję uzyskać dostęp do wszystkich moich UIImageView wewnątrz mój customCell z UITableView, jak mogę to osiągnąć? –

+0

tak, powiedziałeś to, ale nie jest jasne * dlaczego * chciałbyś zrobić coś takiego. Twoje komórki widoku tabeli są po prostu reprezentacjami Twojego modelu danych. Czy próbujesz zastąpić obrazy zastępcze obrazami z pamięci podręcznej, które zostały pobrane z sieci po tym, jak komórka została już wyświetlona? – Paulw11

Odpowiedz

7

Musisz zmień pętlę na:

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

Zrób to wszystko w cellForRowAtIndexPath i zmienić obraz ImageView wziąć słaby wystąpienie ImageView tak:

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

Dokładnie to, co zrobiłem –

+0

Zmiana instancji obrazu na słabe zajmie mniej pamięci. – ajjjjjjjj

0

Myślę, że to nie zadziała z twoim kodem. jak

dla (UIImageView * currentImageView w cell.contentView.subviews)

ta linia będzie starał się przekształcić wszystkie subviews z contentView komórki do UIImageView.

Można ustawić znacznik do wszystkich UIImageView a następnie bezpośrednio do nich dostęp z etykietką jak

cell.contentView.viewWithTag (yourtag)

i ustawić obrazek aby