2015-08-23 9 views

risposta

141

Il modello per CollectionViewController in Xcode 6 viene fornito con questa riga di codice in viewDidLoad, che modifica le specifiche nello storyboard.

// Register cell classes 
self.collectionView!.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier) 

Basta cancellarlo.

+0

Ciò ha causato un errore per me e, in seguito all'eliminazione, la vista ora viene caricata. Tuttavia, ora UICollectionView sembra terribile. Credo che cancellare quella riga di codice significhi che tutti i miei vincoli di layout che avrei impostato nella mia Storyboard, ora sono spazzatura e devono essere aggiunti programmaticamente? –

+0

Penso che il problema dei vincoli abbia un'altra causa. Da Apple doc: "Prima di chiamare il dequeueReusableCellWithReuseIdentifier: forIndexPath: metodo della vista di raccolta, è necessario utilizzare questo metodo o registerNib: forCellWithReuseIdentifier: metodo per indicare alla vista dell'insieme come creare una nuova cella del tipo specificato." La mia esperienza è che, se la cella è definita in uno storyboard, registerNib sembra funzionare automaticamente. – coco

+7

Nota generale: non è necessario registrare classi di celle quando si utilizzano prototipi di Storyboard. Se ti registri, sostituirà il tuo prototipo. – Wizkid

4

Ho riscontrato questo errore durante l'istanziazione di uno ViewController da uno Storyboard nel mio test di unità.

storyboard.instantiateViewControllerWithIdentifier("someVC") as! MyViewController 

Il problema era che avevo assegnato un modulo specifico nella finestra di ispezione identità a quella VC nello Storyboard. L'ho rimosso in modo che passi automaticamente al modulo corrente che è il modulo dell'applicazione mentre è in esecuzione e al modulo Test durante il test.

36

Affronto questo problema, perché nel viewDidLoad() ho registrato la mia cella con classe UICollectionViewCell. Nel mio cellForItemAtIndexPath utilizzato CustomSubcalssCollectionViewCell per dequeueReusableCell.

assicurarsi registerClass e dequeueReusableCell sono la stessa classe di risolvere il problema

self.registerClass(SomeUICollectionCellClass.self, forCellWithReuseIdentifier: reuseIdentifier) 

let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! SomeUICollectionCellClass 
4

Ho ricevuto questo errore quando la classe personalizzata (su Xcode ispettore) aveva ancora la sua classe impostato sul valore predefinito UICollectionViewCell piuttosto rispetto alla mia classe personalizzata per TestProject.CollectionViewCell.

Per risolvere il problema, è sufficiente modificare la classe personalizzata per l'implementazione.

Custom Class Section

Document Outline

0
self.collectionView!.register(MyCollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier) 

Non dovete eliminare questa linea. Registrerai la tua classe di cella ereditata da UICollectionViewCell.self se desideri registrare la classe utilizzando il codice