关于自定义CollectionViewCell的报错总结

  1. 运行时报错: >fatal error: unexpectedly found nil while unwrapping an Optional value

这里的ModuleCollectionViewCell是一个自定义的cell,在storyboard中使用拖拽的方法在一个CollectionView中新增CollectionViewCell控件,在这个cell里有一个Label和一个UIView。

当在这个cell的初始化中直接给UIView(上面的moduleItemView)设置属性,在运行是会报错,说这个UIView是nil。

Debug的时候发现初始化是通过init?(coder aDecoder:NSCoder)进入initModuleItemView()的。

the init(coder: aDecoder) initializer is required by the NSCoding protocol, which means you need to implement it if you override the designated initializer for your superclass.

First of all there is a required init(coder: NSCoder) method which you have to implement even if you are not using storyboards, or xib files.

也就是说因为这个UIView是在storyBoard中画的,在代码中没有初始化,所以swift认为它是nil。解决的办法,就是改为在UICollectionViewDataSource的func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 来对其进行初始化操作,而把ModuleCollectionViewCell中的初始化去掉

 override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! ModuleCollectionViewCell
        cell.moduleLabel.text = "test"
        cell.backgroundColor = UIColor.whiteColor() //pit
        // 初始化的操作放到这里
        cell.moduleItemView.addSubview(cell.collectionView)
        return cell
    }
2015-11-24 18:170