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

标签 ios cocoa-touch swift xcode6

我正在编写一个应用程序,其中我在表格 View 单元格中有一个水平 Collection View 。

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

对我和经验丰富的 cocoa-touch 程序员来说,这表明我的 IBOutlets 没有正确连接,因此 cell.filmTitle 在显式解包时会返回 nil。因此,在重新编码 IBOutlets 并重新连接它们之前,我断开了所有 IBOutlets 与单元格 XIB 的连接,并删除了它们背后的所有代码。但是错误仍然存​​在。

自定义单元格的代码是:

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

Collection View 数据源的代码是:

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,并尝试简单地显示 XIB 中出现的 10 个单元格时,它们根本不显示,我得到的只是十个相同大小的空白单元格。它显示了一些单元格,因为滚动条会根据显示的单元格数量改变大小和滚动。

最佳答案

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

要么在 IB 中正确设置,要么在 viewDidLoad 的 View Controller 中手动执行此操作

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

如果您使用带有原型(prototype)单元的 Storyboard,请确保在 Interface Builder 中设置单元重用标识符。

我猜问题的核心是 TableView 不知道用这个重用标识符加载哪个类。不过,如果有一个堆栈跟踪和更多关于此的信息,那就太好了。您使用的是带有表格 View 单元格的 XIB 文件吗?您在 Storyboard中使用原型(prototype)吗?

关于ios - Swift Cocoa Touch 自定义单元格为 IBOutlets 返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24936849/

相关文章:

ios - 使用 RxSwift 处理请求时出错

ios - 将一系列不同的 SKAction 应用于不同的 SKNode

ios - 管理从普通 NavigationBar 到透明 NavigationBar 的转换

ios - LongPressGestureRecognizer 从 View 背后识别

ios - 生成二维码

ios - Swift 2.3,如何向Instabug报错?

ios - 桥接 NSImage 和 UIImage

ios - 如何在JSON中将字典作为参数传递

iphone - 横向模式下帧大小不会改变

objective-c - 我在 xib 中的 UIButtons 是怎么回事?