2017-08-10 52 views
0

在我的Ios應用程序的登錄屏幕上,我試圖顯示一個視頻。我在堆棧溢出中看到了一個關於如何做這種事情的好例子。我嘗試了自己的代碼,並遇到錯誤。我打算在原帖中評論我的錯誤,但我的帳戶沒有足夠的聲譽來這樣做。我的代碼時,我在我的模擬裝置恢復運行,以我一個錯誤,指出:IOS自定義UIViewController錯誤

致命錯誤:意外發現零而展開的可選值

(LLDB)

我設法追查有錯誤使用斷點第12行是avPlayer = AVPlayer(url: video!)

雖然這裏是我的全碼:

import AVFoundation 
import UIKit 

class VideoBackgroundController: UIViewController { 
var avPlayer: AVPlayer! 
var avPlayerLayer: AVPlayerLayer! 
var paused: Bool = false 

override func viewDidLoad() { 
    let video = Bundle.main.url(forResource:"space", withExtension: "mp4") 
    //This is where my the error happens 
    avPlayer = AVPlayer(url: video!) 
    avPlayerLayer = AVPlayerLayer(player: avPlayer) 
    avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill 
    avPlayer.volume = 0 
    avPlayer.actionAtItemEnd = .none 

    avPlayerLayer.frame = view.layer.bounds 
    view.backgroundColor = .clear 
    view.layer.insertSublayer(avPlayerLayer, at: 0) 

    NotificationCenter.default.addObserver(self, 
              selector: #selector(playerItemDidReachEnd(notification:)), 
              name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, 
              object: avPlayer.currentItem) 
} 

func playerItemDidReachEnd(notification: Notification) { 
    let p: AVPlayerItem = notification.object as! AVPlayerItem 
    p.seek(to: kCMTimeZero) 
} 

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    avPlayer.play() 
    paused = false 
} 

override func viewDidDisappear(_ animated: Bool) { 
    super.viewDidDisappear(animated) 
    avPlayer.pause() 
    paused = true 
} 
} 

而且我也有在我的項目文件中名爲「空間」的mp4視頻。

This is my project tree with my video

任何解釋如何或爲什麼會發生什麼動作我可以解決這個問題,將不勝感激。

+0

請檢查您的視頻文件** ** space.mp4下**構建階段上市公司 - >複製包資源**。如果沒有列出,添加並運行你的代碼。 – Surjeet

+0

將視頻添加到您的Xcode項目 您的項目根目錄>您的目標>構建階段>複製包資源。 你的視頻必須在這裏。如果不是,那麼你應該使用加號按鈕 –

+0

@Surjeet添加它這是問題謝謝! – Charles

回答

1

我已經檢查過你的代碼運行良好。

只需檢查視頻是否位於Target的「Build Phases」選項卡的「Copy bundle Resources」中。

如果不存在,請添加下面的截圖。

Should be in Build Phases tab

+0

謝謝你的工作。還有一個問題..對不起。我正在顯示的視頻實際上是放大的,並沒有延伸到適合屏幕。有什麼方法可以切換嗎? – Charles

+1

根據stackoverflow指南不要求upvote! @Myaaoonn – Lion

0

您正在分配非可選值的視頻。讓它可選,? Swift的意思是 - 它可以有一個值,但也可以是零。它定義爲「?」。請看下面的代碼

avPlayer = AVPlayer(url: video?) 
if avPlayer != nil 
{ // Video url is not empty 
} 
else 
{ // It is empty 
}