隐式展开表视图的自定义单元格上的可选值

问题描述 投票:0回答:1

首先,我直截了当地说我知道这是“重复”,这是我第二次问同样的问题 - 问题是我的第一个关闭而没有我理解问题所以如果有人想关闭这个问题再次让我明白我做错了什么。我上次获得的解决方案并不重要,所以如果我能得到专门的解决那就太好了!

我试图从数组创建tableview上的自定义单元格。当我在我的自定义单元格上附加任何文件时,我在所有文件上都会出现意外的错误,我不明白为什么

这是我的自定义单元格:

class CustomMovieCell: UITableViewCell {


    @IBOutlet weak var title: UILabel!
    @IBOutlet weak var rating: UILabel!
    @IBOutlet weak var releaseYear: UILabel!
    @IBOutlet weak var genre: UILabel!
    var imageBackground: String!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }
}

这是我的UITableView cellForRowAtIndexPath方法:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "MovieCell", for: indexPath) as! CustomMovieCell
        let movieFetched = Movie(title: moviesArray[indexPath.row].title, image: moviesArray[indexPath.row].image, rating: moviesArray[indexPath.row].rating, releaseYear: moviesArray[indexPath.row].releaseYear, genre: moviesArray[indexPath.row].genre)
        print(movieFetched)
        cell.title.text? = movieFetched.title
        cell.rating.text? = String(movieFetched.rating)
        cell.releaseYear.text? = String(movieFetched.releaseYear)
        cell.genre.text? = String(movieFetched.genre[0])
        return cell

    }

我错过了什么?当附加任何文件时我意外地发现nil在展开可选值时 - 我不知道UIlabel因为IBOutlet是可选的吗?偶数 - 尽管它们在我的自定义单元类中不是可选的。

在调试时,我可以看到单元格的所有值 - 标题,图像,评级,releaseYear和genre在尝试为它们分配值时都是nil - 所以我真的不知道该做什么。我已从头开始删除并重新创建了单元格,但它没有任何不同之处。

正如我已经说过的 - 我知道这是“重复”。请尽管 - 在你帮助我之前不要关闭它,因为我最后一次没有得到任何答案,我被引导到一个墙上的文字页面,它无法帮助我理解我的问题。其他“重复”页面就像一般的“什么是可选值”这样的问题,并没有帮助我解决这个具体问题。

编辑:我已将此项目上传到github,如果有人帮我解决这个问题

https://github.com/alonsd/MoviesApi

ios swift null optional
1个回答
1
投票

您已将自定义单元类与2个单元格连接起来。一个是在xib中,另一个是在这个UIViewController中。这个UIViewController's原型电池没有这些标签。所以它将是零并且它将崩溃

从故事板中的MoviesViewController删除原型单元格。并在MoviesViewController viewDidLoad中添加此内容

tableView.register(UINib(nibName: "TableViewCell", bundle: nil), forCellReuseIdentifier: "MovieCell")

更改tableView cellForRowAt方法如下

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "MovieCell") as! TableViewCell
    cell.title.text = moviesArray[indexPath.row].title
    cell.rating.text = String(moviesArray[indexPath.row].rating)
    cell.releaseYear.text = String(moviesArray[indexPath.row].releaseYear)
    cell.genre.text = String(moviesArray[indexPath.row].genre[0])

    return cell

}
© www.soinside.com 2019 - 2024. All rights reserved.