2014-04-04 11 views
23

Mam funkcję, która aktualizuje istniejący UICollectionView. UICollectionView jest tworzony, widzę go, ale kiedy chcę uzyskać dostęp do jego komórek, aby je zaktualizować, są zerowe.UICollectionView cellForItemAtIndexPath jest zerowa

-(void)finishExam{ 

    for (int i = 0; i < [self.questionsOverviewCollection numberOfItemsInSection:0]; i++) { 

     NSLog(@"self.questionsOverviewCollection - %@",self.questionsOverviewCollection); 
     NSLog(@"cell - %@",[self.questionsOverviewCollection cellForItemAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]]); 
     NSLog(@"overviewCell - %@",(OverviewCell*)[self.questionsOverviewCollection cellForItemAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]]); 
     NSLog(@"numOfCells - %d", [self.questionsOverviewCollection numberOfItemsInSection:0]); 

     OverviewCell *cell = (OverviewCell*)[self.questionsOverviewCollection cellForItemAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]]; 
      [cell finishExam]; 
    } 
} 


- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ 

    OverviewCell *cell = (OverviewCell*)[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; 

    [cell someSetUp]; 

    return cell; 
} 

Log:

self.questionsOverviewCollection - <UICollectionView: 0xa1abc00; frame = (14 219; 217 441); clipsToBounds = YES; opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0xe0617a0>; layer = <CALayer: 0xe0bbb00>; contentOffset: {0, 0}> collection view layout: <UICollectionViewFlowLayout: 0xe0cc3f0> 
cell - (null) 
overviewCell - (null) 
numOfCells - 30 
+0

Otrzymujesz wszystko komórka null lub masz jakąś komórkę, a potem u dostać zerowy? – CRDave

Odpowiedz

42

Z UICollectionView docs (podkreślenie własne)

Return Value
Przedmiotem komórek w odpowiedniej ścieżce indeksu lub nil jeśli komórka nie jest widoczna lub indexPath jest poza zakresem.

Powinieneś zaktualizować swój bazowy model, który dostarcza dane do widoków.

+9

To działało dla mnie, ale oprócz przeładowania danych za pomocą [view reloadData], musiałem również [view layoutIfNeeded], jak na http://stackoverflow.com/a/21480786/1388195 – zyzof

+19

Wywołanie [collectionView layoutIfNeeded] pracował dla do zdobycia komórki po wywołaniu [collectionView reloadData]. Dzięki @zyzof –

+3

Dziękuję wszystkim za layoutIfNeeded !!! : D Zastanawiam się, czy ktoś wie dlaczego? W moim przypadku komórka była widoczna przez cały czas. – Happiehappie

6

Spróbuj tego:

[collectionView reloadData]; 
[collectionView layoutIfNeeded]; 
Powiązane problemy