2015-02-04 18 views
6

Wystąpił błąd poniżej podczas próby przesłania dequeueReusableCell do MenuCollectionViewCell, dla której utworzyłem plik i zmieniono komórkę w serii ujęć na tę klasę. Śledzę to tutorial od raywenderlich. Sprawdziłem kod z przykładem i nie mogłem znaleźć błędu. Jakie są typowe błędy, które powodują ten błąd?Swift Niestandardowe kolekcjonowanieOdrzucanie rzutów nie powiodło się, gdy usunięto klauzulę ponownej awarii

Jeśli zmienię rzut z powrotem na as UICollectionViewCell, błąd zniknie.

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


     cell.backgroundColor = UIColor.lightGrayColor() 


     return cell 
    } 

Błąd:

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) 

Aktualizacja: Jeśli próbowałeś sprawdzania typu komórkowego z poniższym kodzie i dostał fałszywy, chociaż mam ustawić go MenuCollectionViewCell w serii ujęć.

print(cell is MenuCollectionViewCell) => false 

Storyboard cell setting

Odpowiedz

23

Problem był poniżej kod w viewDidLoad() sposobu, który przyszedł z szablonem UICollectionViewController. Usunąłem go i wszystko działało zgodnie z oczekiwaniami.

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

To niewiarygodne, że kod na płycie podziałowej spowodowałby tyle bólu, po prostu zmarnował więcej niż godzinę, próbując rozwiązać ten problem !!! Dzięki. – kakubei

+0

Zaskoczyło mnie to również przez chwilę. Nie ma sensu, abyś musiał zarejestrować klasę komórek, jeśli "UICollectionViewController" miał komórkę zdefiniowaną w scenorysie, ale ponieważ linia była tam z szablonu szablonu, nie usunąłem jej na początku. –