SKView!呈现时发现为零
SKView! found nil when presented
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' 上播放视频后(Class 以上)
然后我删除视图并显示我的 GameContollerView1,它有 GameScene。
(下图Class)
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
}
}
我最初的问题是当我显示 class 'GameViewController1' 时出现错误:
fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb)
在这一行:
if skView.scene == nil {
所以它告诉我我的 SKView!是 nil,正如您从我的 if 语句中看到的那样,这正是我一直在寻找的东西。
最奇怪的是,当我跳过 'MyClass' 并首先将 StoryBoard 入口点指向 GameViewContoller1 时,所有代码都能正确播放。
AVPlayer() 是否与此有关?从逻辑上讲,我的代码应该可以工作,但由于某些未知原因……事实并非如此。任何帮助将不胜感激。
OP 答案:最后回到 AppDelegate 并从那里调用 GameViewController1 class。花了一点时间才弄明白,但这是为我完成的整体代码:
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 或其中一种视图方法中,否则会出现错误 "Expected Declaration"
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' 上播放视频后(Class 以上)
然后我删除视图并显示我的 GameContollerView1,它有 GameScene。
(下图Class)
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
}
}
我最初的问题是当我显示 class 'GameViewController1' 时出现错误:
fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb)
在这一行:
if skView.scene == nil {
所以它告诉我我的 SKView!是 nil,正如您从我的 if 语句中看到的那样,这正是我一直在寻找的东西。
最奇怪的是,当我跳过 'MyClass' 并首先将 StoryBoard 入口点指向 GameViewContoller1 时,所有代码都能正确播放。
AVPlayer() 是否与此有关?从逻辑上讲,我的代码应该可以工作,但由于某些未知原因……事实并非如此。任何帮助将不胜感激。
OP 答案:最后回到 AppDelegate 并从那里调用 GameViewController1 class。花了一点时间才弄明白,但这是为我完成的整体代码:
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 或其中一种视图方法中,否则会出现错误 "Expected Declaration"