2014-12-07 1 views
6

Ho un semplice UICollectionView. La prima volta che viene caricata la vista, cellForItemAtIndexPath viene chiamato tre volte e vedo tre celle.UICollectionView: ricarica le chiamate dati numberOfItemsInSection ma non cellForItemAtIndexPath

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section { 
    NSUInteger count = ([self.results count] > 0 ? [self.results count] : 3); 
    NSLog(@"count %lu", (unsigned long)count); 
    return count; 
} 

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
    NSLog(@"cellForItemAtIndexPath called"); 
    UICollectionViewCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"TasteCell" forIndexPath:indexPath]; 
    cell.backgroundColor = [UIColor whiteColor]; 
    return cell; 
} 

Tuttavia, più tardi self.results diventa un array di 5 elementi e chiamo:

[self.collectionView reloadData]; 

Quando questo accade, numberOfItemsInSection si chiama di nuovo e la "conta" dichiarazione log ci mostra che restituisce 5. Tuttavia, questa volta, cellForItemAtIndexPath non viene mai chiamato e l'interfaccia utente mostra ancora le tre celle del primo caricamento.

Perché il numero di celle non viene aggiornato anche se il conteggio è cambiato?

+0

Forse questa risposta potrebbe aiutare: http://stackoverflow.com/a/19100840/2274694 –

+0

UICollectionView e UITableView aggiornano solo le celle visibili in vista. – NANNAV

+0

Se provo ciò che Lyndsey ha suggerito, lamenta di aver modificato il conteggio senza inserire ed eliminare elementi: "NSInternalInconsistencyException", motivo: "Aggiornamento non valido: numero non valido di elementi nella sezione 0. Il numero di elementi contenuti in una sezione esistente dopo il l'aggiornamento (5) deve essere uguale al numero di elementi contenuti in quella sezione prima dell'aggiornamento (3), più o meno il numero di elementi inseriti o cancellati da quella sezione (0 inseriti, 0 cancellati) e più o meno il numero di oggetti spostati dentro o fuori da quella sezione (0 spostati, 0 spostati fuori). ' – theraju

risposta

1

Provare a impostare l'origine dati e delegare di nuovo per UICollectionView e quindi ricaricarlo di nuovo.

-(void)reloadCollectionView { 
    mycollectionView.dataSource = self; 
    mycollectionview.delegate = self; 
    [mycollectionview reloadData]; 
} 
+0

Nope stessa NSInternalInconsistencyException. Vuoi sapere se è questo il problema: http://stackoverflow.com/questions/12611292/uicollectionview-assertion-failure – theraju

1

Penso che si stia utilizzando il concetto di cella di visualizzazione raccolta statica. Se è statico, cambialo in dinamico nel tuo xib/storyboard.

0

Verificare di aver collegato sia l'origine dati sia il delegato di collectionView al proprio controller di visualizzazione. se non fare questo

 -(void)viewDidLoad 
      { 
       [super viewDidLoad]; 
       mycollectionView.dataSource = self; 
       mycollectionview.delegate = self; 
      } 

Spero che questo vi aiuterà.