Swift Cocoa Touch自定义单元格返回IBOutlets为nil

4
我正在编写一个应用程序,其中在表视图单元格中有一个水平集合视图。尝试以编程方式设置单元格中的文本时,应用程序会崩溃并显示“fatal error: unexpectedly found nil while unwrapping an Optional value”错误消息。对我和一位更有经验的cocoa-touch程序员来说,这表明我的IBOutlets没有正确连接,因此当明确取消包装时,cell.filmTitle将返回nil。因此,我取消了所有与单元格XIB相关联的IBOutlets,并删除了它们背后的所有代码,然后重新编码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是问题的原因,尽管已正确连接到标签,但却是nil。此外,dump(cell)在控制台输出“-”。感谢任何能提供帮助的人。 编辑2:通过进一步调查,我发现根本没有看到这个单元格。当我删除IBOutlets,并尝试简单地显示10个单元格,就像它们在XIB中显示的那样,它们根本没有显示出来,我只得到了大小相同的十个空白单元格。它会显示一些单元格,因为滚动条会根据显示的单元格数量而改变大小并滚动。

出队后,cell 的值是多少?“Home Whats On Collection View Cell” 真的是重用标识符吗? - Nate Cook
1
可能是 IBOutlet 没有正确连接,或者 IB 中存在错误导致出现问题。请确认您只有一个类型为 homeWhatsOnCellectionCell 的原型单元格,其重用标识符为“Home Whats On Collection View Cell”,并且已将输出连接到该单元格中的字段? - Nate Cook
@Nate 是的,我只有一个带有那个类的单元格 XIB,标识符是“主页 What's On 集合视图单元格”,并且所有插座都已连接。 - Cailean Wilkinson
1
我遇到的问题与这个问题有关。我必须删除contactsView.registerClass(ContactCell.self, forCellWithReuseIdentifier: "ContactCell") - hayesgm
很难确定出了什么问题。至少你需要发布一个堆栈跟踪,这样我们才能确切地知道错误发生的位置。 - n13
显示剩余7条评论
1个回答

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文件? 您是否在故事板中使用原型?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接