2012-10-21 19 views
13

Sto ottenendo il seguente incidente:dequeueReusableCellWithReuseIdentifier incidente 'non poteva dequeue una visione di tipo" UICollectionElementKindCell'

terminazione app a causa di eccezione non identificata 'NSInternalInconsistencyException', la ragione: 'non poteva dequeue una visione di tipo: UICollectionElementKindCell con identificatore cellulare - deve registrare un pennino o di una classe per l'identificatore o collegare un prototipo di cella in uno storyboard'

io ho il seguente nel mio viewDidLoad:

[self.collectionView registerClass:[UICollectionViewCell class] 
     forCellWithReuseIdentifier:@"Cell"]; 

E la linea che si blocca è nella richiamata cellForItemAtIndexPath:

UICollectionViewCell *cell = [collectionView 
    dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath]; 

ho cercato per ore, ma non riesco a trovare alcuna soluzione. Ho provato a creare sottoclassi di UICollectionViewCell ma ho ottenuto lo stesso errore.

Con i breakpoint, ho determinato che la riga registerClass viene eseguita prima dell'esecuzione del callback dequeueReusableCellWithReuseIdentifier.

+4

Inserire un punto di interruzione nella riga 'registerClass: forCellWithReuseIdentifier:'. Quando viene colpito, stampa 'self.collectionView'. È niente? Se è così, hai dimenticato di collegare la presa (se si utilizza un pennino) o impostare la proprietà (se si utilizza il codice). Se non è zero, inserire un punto di interruzione nella riga 'dequeueReusableCellWithReuseIdentifier: forIndexPath:'. Stampa 'collectionView' quando viene colpito il punto di interruzione. Hai lo stesso puntatore che hai ottenuto dal primo punto di interruzione? –

+0

@robmayoff Seguite i vostri passi, prima di 'dequeueReusableCellWithReuseIdentifier: forIndexPath' ha lo stesso puntatore.Ma quando colpisce 'dequeueReusableCellWithReuseIdentifier: forIndexPath' si blocca con lo stesso errore. –

risposta

15

Ho avuto questo problema perché stavo chiamando registerClass prima del stavo creando un'istanza per il mio oggetto vista tabella. Codice lavoro:

self.tableView = [[UITableView alloc] initWithFrame:self.view.frame]; 
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"]; 
[self.view addSubview:self.tableView]; 
self.tableView.delegate = self; 
self.tableView.dataSource = self; 
[self.tableView reloadData]; 
1

Se vi capita di sperimentare questo, in UICollectionViewController o UITableViewController, fare come quello che rubare mayoff detto e fare in modo che il vostro Collection View o Table View è collegato proprietà nel vostro Storyboard.

Un altro errore comune è nello Storyboard che si è dimenticato di dare il diritto CollectionID o CellID.

0

Una volta, mentre stavo lavorando su cellule vista collezione, ho scritto:

static NSString *identifier = @"cell "; 

Guardando con attenzione, si vedrà uno spazio extra alla fine della stringa di identificazione. Dopo aver realizzato il mio errore, spero che questo possa essere d'aiuto a qualcuno.

Riferimento:

could not dequeue a view of kind: UICollectionElementKindCell with identifier

4

Inoltre, non dimenticare la differenza tra una cellula (registro ... forCellWithReuseIdentifier) ​​e una vista supplementare (registro ... forSupplementaryViewOfKind).

ero dequeing correttamente con il supplementare (intestazione/piè di pagina) il tipo, ma per sbaglio ho registrati come un tipo di cellula. Duh.

+0

Questa risposta sembra ovvia ma può essere difficile da individuare poiché ti immagini di aver scritto il metodo giusto. Buona risposta. –

Problemi correlati