ios - 在表格视图的自定义单元格上隐式展开可选值
问题描述
首先,我直截了当地说,我知道这是“重复的”,这是我第二次问同样的问题 - 问题是我的第一个问题在我不理解问题的情况下已经关闭,所以如果有人想关闭,请这个问题再次首先让我明白我做错了什么。我上次得到的解决方案无关紧要,所以如果我能得到具体解决,那就太好了!
我正在尝试从数组中在 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 和流派在尝试为它们分配值时都为零 - 所以我现在真的不知道该怎么做。我已经从头开始删除并重新创建了单元格,它没有任何不同。
正如我已经说过的 - 我知道这是“重复的”。但是请 - 在您帮助我之前不要关闭它,因为我上次没有得到任何答案,我被引导到一个没有帮助我理解我的问题的文字墙页面。其他“重复”页面就像一般的“什么是可选值”之类的问题,并不能帮助我解决这个特定问题。
编辑:如果它可以帮助任何人帮助我解决这个问题,我已经将此项目上传到 github
解决方案
您已将自定义单元类与 2 个单元连接起来。一个在 xib 中,另一个在 this 中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
}
推荐阅读
- type-conversion - 在 Impala 中将秒(字符串)转换为时间戳
- azure-timeseries-insights - 从 TSI 获取特定时间段的数据帧
- pine-script - 如何根据最新的“n”根蜡烛的最高点绘制一条水平直线?
- c++ - 没有指定初始化程序的静态结构初始化?
- javascript - GSAP 的视差效果
- redis - Redis 服务器服务永远激活
- json - 将 pyspark 数据帧转换为嵌套的 json 结构
- r - 在一列中更改多个值
- ios - 如何让我的 iPad 应用程序永远存在 - 无需 AppStore 签名
- image - 图像预览在tramp for org 模式下不起作用