【问题标题】:SKView! found nil when presentedSK查看!出现时发现为零
【发布时间】:2015-12-01 04:06:22
【问题描述】:
class MyClass: UIViewController {

var playerViewController = AVPlayerViewController()
var playerView = AVPlayer()
var playerTimer = NSTimer()


override func viewDidAppear(animated:Bool) {
    super.viewDidAppear(true)
    presentViewController(GameViewController1(), animated: false, completion: nil)
    let fileURL = NSURL(fileURLWithPath: "SomeFile.mp4")

    playerView = AVPlayer(URL: fileURL)

    playerViewController.player = playerView

    self.presentViewController(playerViewController, animated: false){
        self.playerViewController.showsPlaybackControls = false
        self.playerViewController.player?.play()
        self.playerTimer = NSTimer.scheduledTimerWithTimeInterval(4.2, target: self, selector:Selector("stopAfter4seconds:"), userInfo: nil, repeats: false)
    }
}
func stopAfter4seconds(timer: NSTimer){
    playerViewController.player = nil
    playerViewController.removeFromParentViewController()
    playerTimer.invalidate()
    playerViewController.presentViewController(GameViewController1(), animated: false, completion: nil)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()


}

}

在我在“MyClass”(上面的班级)上播放视频后

然后,我删除视图并展示具有 GameScene 的 GameContollerView1。
(下面的类)

class GameViewController1: UIViewController, ADBannerViewDelegate {


@IBOutlet var skView: SKView!

override func viewDidLoad() {
    super.viewDidLoad()


    if skView.scene == nil {
        let scene = GameScene(size: skView.bounds.size)
        skView.presentScene(scene)
    }
}

override func shouldAutorotate() -> Bool {
    return true
}

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
        return UIInterfaceOrientationMask.AllButUpsideDown
    } else {
        return UIInterfaceOrientationMask.All
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

override func prefersStatusBarHidden() -> Bool {
    return true
}

}

我最初的问题是,当我展示“GameViewController1”类时,我得到了错误:

 fatal error: unexpectedly found nil while unwrapping an Optional value
  (lldb) 

在这一行:

if skView.scene == nil {

所以它告诉我我的 SKView!是 nil,正如你在我的 if 语句中看到的那样,这就是我一直在寻找的东西。

最奇怪的是,当我跳过“MyClass”并将我的 StoryBoard 入口点首先指向 GameViewContoller1 时,所有代码都可以正常播放。

AVPlayer() 与此有关吗?从逻辑上讲,我的代码应该可以工作,但由于某些未知原因……它不是。任何帮助将不胜感激。

【问题讨论】:

  • 也许尝试在@IBOutlet下面添加var scene: GameScene!...
  • 值得一试,但不幸的是它返回的场景也为零
  • this 怎么样,同样的结果? ...
  • nada,也感谢您的快速回复。我很确定这与我呈现 GameViewController1 的方式有关,因为“MyClass”中的 AVPlayerViewController 非常棘手,所以我认为我做的不对

标签: ios xcode swift view skview


【解决方案1】:

OP 答案:最终返回 AppDelegate 并从那里调用 GameViewController1 类。花了一点时间才弄清楚,但这是为我完成的整体代码:

let gameScene = UIStoryboard(name: "Main", bundle:nil).instantiateViewControllerWithIdentifier("GameViewController1") as UIViewController
    let appDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
    appDelegate.window?.rootViewController = gameScene

我将此代码输入到 ViewDidDisappear 以使我的 AVplayer 消失并加载新视图 :).. 你不知道这花了我多长时间。

提示:确保将其放入某种 ViewDidLoad 或其中一种视图方法中,否则您将收到错误“预期声明”

【讨论】:

    猜你喜欢
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 2015-10-07
    • 1970-01-01
    • 2020-05-11
    相关资源
    最近更新 更多