自定义UICollectionCell的nil标签

编辑 :看起来像这个相同的问题
我使用自定义布局和单元格进行了集合视图,但是我的单元格的位置有点偏移,所以我决定对它们进行编号,以便我可以更轻松地进行debugging。 我跟着这家伙的回答 ,使用标签给我的单元格编号。 不知何故, myLabel是零,导致我的应用程序崩溃。

我相信我已经正确连接了网点,但也许有人可以提供一个列表来检查我是否做错了什么。

视图控制器

 import UIKit class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate { @IBOutlet var gridView: UICollectionView! private let reuseIdentifier = "DesignCell" private let numberOfSections = 1 private let numberOfCircles = 48 override func viewDidLoad() { super.viewDidLoad() self.gridView.registerClass(MyCell.self, forCellWithReuseIdentifier: reuseIdentifier) } func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { return numberOfSections } func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return numberOfCircles } func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! MyCell cell.myLabel.text = String(indexPath.item) // myLabel is nil and causes a crash return cell } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } 

GridLayout(我的自定义布局)

 import UIKit import Darwin class GridLayout: UICollectionViewLayout { private let numberOfColumns = 12 private let numberOfRows = 4 private var cache = [UICollectionViewLayoutAttributes]() private var contentHeight: CGFloat = 0 private var contentWidth: CGFloat { let insets = collectionView!.contentInset return CGRectGetWidth(collectionView!.bounds) - insets.left - insets.right } override func prepareLayout() { // some calculation i did for my cells } override func collectionViewContentSize() -> CGSize { return CGSize(width: contentWidth, height: contentHeight) } override func layoutAttributesForElementsInRect(rect: CGRect) -> [UICollectionViewLayoutAttributes]? { var layoutAttributes = [UICollectionViewLayoutAttributes]() for attr in cache { if CGRectIntersectsRect(attr.frame, rect) { layoutAttributes.append(attr) } } return layoutAttributes } } 

了myCell

 import UIKit class MyCell : UICollectionViewCell { @IBOutlet weak var myLabel: UILabel! } 

尝试在viewController类的viewDidLoad()中删除这一行:

 self.gridView.registerClass(MyCell.self, forCellWithReuseIdentifier: reuseIdentifier) 

这是不需要的,因为你已经在Storyboard中创build了你的UICollectionView,连接到你的数据源和委托,并且你已经添加了所有需要的方法:

  • numberOfItemsInSection
  • cellForItemAtIndexPath