【问题标题】:IOS Custom UIViewController ErrorIOS自定义UIViewController错误
【发布时间】:2018-01-18 03:42:04
【问题描述】:

在我的 Ios 应用程序的登录屏幕中,我试图显示一个视频。我在堆栈溢出上看到了一个很好的例子,说明如何做这样的事情。我自己尝试了代码并遇到了错误。我打算在原始帖子上评论我的错误,但我的帐户没有足够的声誉来这样做。当我在模拟设备上运行时,我的代码返回给我一个错误,上面写着:

致命错误:在展开可选值时意外发现 nil

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

我的项目文件中确实有一个名为“space”的 mp4 视频。

任何解释如何或为什么会发生这种情况以及我可以采取哪些措施来解决这个问题将不胜感激。

【问题讨论】:

  • 请检查您的视频文件 space.mp4 是否列在 Build Phase -> Copy Bundle Resources 下。如果未列出,请添加并运行您的代码。
  • 将视频添加到您的 Xcode 项目您的项目根目录 > 您的目标 > 构建阶段 > 复制捆绑资源。您的视频必须在此处。如果不是,那么您应该使用加号按钮添加它
  • @Surjeet 那是问题谢谢!

标签: ios xcode swift3 uiviewcontroller uikit


【解决方案1】:

我已经检查过了,您的代码运行良好。

只需检查一下,该视频应该位于 Target 中“构建阶段”选项卡的“复制捆绑资源”中。

如果不存在,请添加与以下屏幕截图相同的内容。

【讨论】:

  • 感谢您的帮助。还有一个问题..对不起。我正在显示的视频实际上是放大的,而不是拉伸到适合屏幕的。有什么办法可以切换吗?
  • 不要根据 stackoverflow 指南要求投票! @Myaaoonn
【解决方案2】:

您正在分配视频的非可选值。使其成为可选的, ? Swift 的意思是——它可以有一个值,但也可以是 nil。它由“?”定义。请看下面的代码

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多