2015-02-04 9 views
6

Ich habe den Fehler unten bei dem Versuch, die dequeueReusableCell zu MenuCollectionViewCell zu werfen, die ich für eine Datei erstellt und die Zelle im Storyboard zu dieser Klasse geändert haben. Ich folge diesem tutorial von raywendlich. Ich habe den Code mit dem Beispiel überprüft und konnte den Fehler nicht finden. Was sind häufige Fehler, die diesen Fehler verursachen?Swift Custom CollectionViewCell Casting ist fehlgeschlagen, wenn dequeueReusableCell

Wenn ich das Casting wieder auf as UICollectionViewCell ändern, dann verschwindet der Fehler.

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


     cell.backgroundColor = UIColor.lightGrayColor() 


     return cell 
    } 

Fehler:

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) 

Update: Wenn versucht, den Zellentyp mit dem Code überprüft unten und bekam falsch, obwohl ich es MenuCollectionViewCell im Storyboard festgelegt haben.

print(cell is MenuCollectionViewCell) => false 

Storyboard cell setting

Antwort

23

Das Problem war, der Code unten in viewDidLoad() Methode, die mit der UICollectionViewController Vorlage kam. Ich entfernte es und alles funktionierte wie erwartet.

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

Es ist unglaublich, dass Boilerplate-Code so viel Herzschmerz verursachen würde, nur verschwendet mehr als eine Stunde zu versuchen, dies zu beheben !!! Vielen Dank. – kakubei

+0

Das verwirrte mich auch eine Weile. Es machte keinen Sinn, dass Sie die Zellenklasse registrieren müssten, wenn die Zelle im 'UICollectionViewController' im Storyboard definiert war, aber da die Zeile von der Vorlage stammte, habe ich sie nicht zuerst entfernt. –

Verwandte Themen