UITableViewCell 中的 AVPlayer 导致“在隐式展开可选值时意外发现 nil”错误
Posted
技术标签:
【中文标题】UITableViewCell 中的 AVPlayer 导致“在隐式展开可选值时意外发现 nil”错误【英文标题】:AVPlayer in UITableViewCell results in "Unexpectedly found nil while implicitly unwrapping an Optional value" error 【发布时间】:2020-03-21 09:29:30 【问题描述】:我正在尝试设置一个自定义 UITableViewCell,它将在单元格中包含一个视频播放器。
我收到了"Unexpectedly found nil while implicitly unwrapping an Optional value"
的电话:
"playerLayer.frame = self.videoPlayerSuperView.bounds"
这是我正在使用的代码:
import UIKit
import AVFoundation
class feedCell: UITableViewCell
@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var viewsLabel: UILabel!
@IBOutlet weak var postTextLabel: UILabel!
@IBOutlet weak var videoPlayerSuperView: UIView!
override func awakeFromNib()
super.awakeFromNib()
let videoURL = URL(string: "https://some.url.of.an.mp4")
let player = AVPlayer(url: videoURL!)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = self.videoPlayerSuperView.bounds
self.videoPlayerSuperView.layer.addSublayer(playerLayer)
player.play()
override func setSelected(_ selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
我该如何解决这个问题?
【问题讨论】:
您的videoPlayerSuperView
不是awakeFromNib
中的ready
。创建单元格后,您可以使用它。例如创建一个单独的方法来设置框架。并在 cellForRow 中创建单元格后调用该方法。
谢谢,这是问题,现在已排序
【参考方案1】:
感谢@AjinkyaSharma
override func layoutSubviews()
super.layoutSubviews()
let videoURL = URL(string: "https://some.url.of.an.mp4")
let player = AVPlayer(url: videoURL!)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = self.videoPlayerSuperView.bounds
self.videoPlayerSuperView.layer.addSublayer(playerLayer)
player.play()
【讨论】:
【参考方案2】:尝试添加延迟
override func awakeFromNib()
super.awakeFromNib()
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.2 ,
execute:
let videoURL = URL(string: "https://some.url.of.an.mp4")
let player = AVPlayer(url: videoURL!)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = self.videoPlayerSuperView.bounds
self.videoPlayerSuperView.layer.addSublayer(playerLayer)
player.play()
)
【讨论】:
以上是关于UITableViewCell 中的 AVPlayer 导致“在隐式展开可选值时意外发现 nil”错误的主要内容,如果未能解决你的问题,请参考以下文章
更改 UITableViewCell 中的对象也更改了重用 UITableViewCell 的对象
确定 UITableViewCell 中的 UIButton
UITableViewCell 事件中的 UIButton 不起作用
UITableViewCell 中的 UICollectionView