我不能使用func:意外找到nil,同时隐式展开Optional值

问题描述

您好,我尝试制作视频播放器,但运行它时出现此错误

线程1:致命错误:在隐式展开一个可选值时意外发现nil

此处的代码

@objc class SwiftViewController: UIViewController {
    
    let canvas = Canvas()
    @IBOutlet weak var videoPlayer: VideoPlayer!
    let Button: UIButton = UIButton(frame: CGRect(x: 100,y: 100,width: 100,height: 50))
    var firstVC: ViewController!
    
    @objc func buttonAction(sender: UIButton!) {
      print("Button Swift Tapped")
    }
    
    override func viewDidAppear(_ animated: Bool) {
        videoPlayer.PlayVideoWithPath("Test_Video",ofType: "mp4")
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        Button.setTitle("Swift View",for: .normal)
        Button.addTarget(self,action: #selector(buttonAction),for: .touchUpInside)
        self.view.addSubview(Button)
        self.view.addSubview(canvas)
        canvas.backgroundColor = .white
        canvas.frame = view.frame
    }
}

和VideoPlayer类:

class VideoPlayer: UIView {

    @IBOutlet weak var vmPlayer: UIView!
    var player: AVPlayer?
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        commonInit()
    }
    
    fileprivate func commonInit() {
        let viewForXib = Bundle.main.loadNibNamed(
            "../Controllers/VideoPlayer",owner: self,options: nil)![0] as! UIView
        viewForXib.frame = self.bounds
        addSubview(viewForXib)
        addplayerToView(self.vmPlayer)
    }
    
    fileprivate func addplayerToView(_ view: UIView) {
        player = AVPlayer()
        let playerLayer = AVPlayerLayer(player: player)
        playerLayer.frame = self.bounds
        playerLayer.videoGravity = .resizeAspectFill
        view.layer.addSublayer(playerLayer)
        NotificationCenter.default.addobserver(
            self,selector: #selector(playerEndplay),name: .AVPlayerItemDidplayToEndTime,object: nil)
    }
    
    func PlayVideoWithPath(_ path: String,ofType type:String) {
        guard let filepath = Bundle.main.path(
                forResource: path,ofType: type) else { return}
        let videoURL = URL(fileURLWithPath: filepath)
        let playerItem = AVPlayerItem(url: videoURL)
        player?.replaceCurrentItem(with: playerItem)
        player?.play()
    }
    
    @objc func playerEndplay() {
        print("Player ends Playing video")
    }
}

感谢您的帮助:)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...