对于IBOutlets,Swift Cocoa Touch定制单元返回nil

时间:2014-07-24 14:42:43

标签: ios cocoa-touch swift xcode6

我正在编写一个应用程序,其中我在表格视图单元格中有一个水平集合视图。

尝试以编程方式设置单元格中的文本时,应用程序崩溃并显示fatal error: unexpectedly found nil while unwrapping an Optional value错误消息。

对于我和一位经验丰富的可可触摸程序员,这表明我的IBOutlets未正确连接,因此cell.filmTitle在明确解包时将返回nil。所以我将所有IBOutlet连接到单元格XIB,并删除它们背后的所有代码,然后重新编码IBOutlets并重新连接它们。但错误仍然存​​在。

自定义单元格的代码是:

class homeWhatsOnCellectionCell: UICollectionViewCell {
    @IBOutlet var filmTitle: UILabel!
    @IBOutlet var filmPoster: UIImageView!
}

集合视图数据源的代码是:

func collectionView(collectionView: UICollectionView!, numberOfItemsInSection section: Int) -> Int {
    return 1
}

func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell! {
    var cell: homeWhatsOnCellectionCell = collectionView.dequeueReusableCellWithReuseIdentifier("Home Whats On Collection View Cell", forIndexPath: indexPath) as homeWhatsOnCellectionCell
    cell.filmTitle.text = "The Hunger Games: Catching Fire"
    cell.filmPoster.image = UIImage(named: "The Hunger Games.jpg")
    return cell
}

func numberOfSectionsInCollectionView(collectionView: UICollectionView!) -> Int {
    return 1
}

修改:在与Nate Cook的对话中,我可以说filmTitle是问题的原因,尽管已正确连接到标签,但nildump(cell) 。此外,{{1}}向控制台输出“ - ”。感谢任何可以提供帮助的人。

编辑2:通过进一步调查,我发现根本没有看到细胞。当我移除IBOutlets,并试图简单地显示它们出现在XIB中的10个单元格时,它们根本不显示,而我得到的是10个相同大小的空白单元格。它显示了一些单元格,因为滚动条会根据显示的单元格数量更改大小和滚动。

1 个答案:

答案 0 :(得分:0)

听起来XIB文件甚至没有加载。

在IB中正确设置,或在viewDidLoad中的视图控制器中手动设置

// register table view cell in external XIB file "YourFileName.xib"
tableView.registerNib(UINib(nibName: "YourFileName", bundle: nil), forCellReuseIdentifier: "Home Whats On Collection View Cell")

如果您正在使用包含原型单元格的故事板,请确保在Interface Builder中设置单元格重用标识符。

我猜测问题的核心是表视图不知道要使用此重用标识符加载哪个类。很高兴有一个堆栈跟踪和更多关于此的信息。您是否正在使用带有表格视图单元格的XIB文件?你在故事板中使用原型吗?