dequeueReusableCell时,Swift Custom CollectionViewCell Casting失败

时间:2015-02-04 16:59:13

标签: ios casting uicollectionview

我在尝试将dequeueReusableCell转换为MenuCollectionViewCell时遇到了错误,我已为其创建了一个文件,并将故事板中的单元格更改为该类。我正在关注来自raywenderlich的tutorial。我用示例检查了代码,但找不到错误。 导致此错误的常见错误是什么?

如果我将回放更改回as UICollectionViewCell,则错误消失。

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


        cell.backgroundColor = UIColor.lightGrayColor()


        return cell
    }

错误:

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)

更新 如果尝试使用下面的代码检查单元格类型,并且即使我已在故事板中将其设置为MenuCollectionViewCell,也会出现错误。

    print( cell is MenuCollectionViewCell ) => false

Storyboard cell setting

1 个答案:

答案 0 :(得分:24)

问题是UICollectionViewController模板附带的viewDidLoad()方法中的代码。我删除了它,一切都按预期工作。

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