2017-08-10 70 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 
}