2015-02-04 12 views
6

Ho ricevuto l'errore seguente quando ho provato a trasmettere lo dequeueReusableCell a MenuCollectionViewCell per il quale ho creato un file e ho modificato la cella nello storyboard in quella classe. Sto seguendo questo tutorial da raywenderlich. Ho controllato il codice con l'esempio e non ho trovato l'errore. Quali sono gli errori più comuni che causano questo errore?Raccolta personalizzata Swift Casting ViewCell non riuscita quando dequeueReusableCell

Se cambio il cast a as UICollectionViewCell, l'errore scompare.

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as MenuCollectionViewCell 


     cell.backgroundColor = UIColor.lightGrayColor() 


     return cell 
    } 

Errore:

libswiftCore.dylib`swift_dynamicCastClassUnconditional: 
    0x10bd39860: pushq %rbp 
    0x10bd39861: movq %rsp, %rbp 
    0x10bd39864: testq %rdi, %rdi 
    0x10bd39867: je  0x10bd3989e    ; swift_dynamicCastClassUnconditional + 62 
    0x10bd39869: movabsq $-0x7fffffffffffffff, %rax 
    0x10bd39873: testq %rax, %rdi 
    0x10bd39876: jne 0x10bd3989e    ; swift_dynamicCastClassUnconditional + 62 
    0x10bd39878: leaq 0xb52e9(%rip), %rax 
    0x10bd3987f: movq (%rax), %rax 
    0x10bd39882: andq (%rdi), %rax 
    0x10bd39885: nopw %cs:(%rax,%rax) 
    0x10bd39890: cmpq %rsi, %rax 
    0x10bd39893: je  0x10bd398ad    ; swift_dynamicCastClassUnconditional + 77 
    0x10bd39895: movq 0x8(%rax), %rax 
    0x10bd39899: testq %rax, %rax 
    0x10bd3989c: jne 0x10bd39890    ; swift_dynamicCastClassUnconditional + 48 
    0x10bd3989e: leaq 0x36b7d(%rip), %rax  ; "Swift dynamic cast failed" 
    0x10bd398a5: movq %rax, 0xb4c0c(%rip)  ; gCRAnnotations + 8 
    0x10bd398ac: int3 
    0x10bd398ad: movq %rdi, %rax 
    0x10bd398b0: popq %rbp 
    0x10bd398b1: retq 
    0x10bd398b2: nopw %cs:(%rax,%rax) 

Aggiornamento: Se provato a controllare il tipo di cella con il codice qui sotto e ottenuto falsa anche se ho impostarlo MenuCollectionViewCell nello storyboard.

print(cell is MenuCollectionViewCell) => false 

Storyboard cell setting

risposta

23

il problema era il codice qui sotto in viewDidLoad() metodo che è venuto con il modello UICollectionViewController. L'ho rimosso e tutto ha funzionato come previsto.

self.collectionView!.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier) 
+5

È incredibile che il codice boilerplate possa causare così tanto angoscia, ma solo più di un'ora cercando di risolvere il problema !!! Grazie. – kakubei

+0

Anche questo mi ha lasciato perplesso. Non aveva senso che fosse necessario registrare la classe della cella se il 'UICollectionViewController' aveva la cella definita nello storyboard, ma, poiché la linea era presente dal template boilerplate, non l'ho rimossa all'inizio. –

Problemi correlati