AVPlayer в UITableViewCell приводит к ошибке «Неожиданно найден ноль при неявном развертывании необязательного значения» - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь настроить пользовательский 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)
    }
}

Как мне решить эту проблему?

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Благодаря @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()
}
0 голосов
/ 21 марта 2020

Попробуйте добавить задержку

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()

    })

}
...