2016-08-20 54 views
0

我有一個UITabBarController有兩個項目,第一個是一個日曆,這只是一個UIWebView。第二個項目引入SpriteKit遊戲場景並隱藏標籤欄(遊戲需要全屏顯示)。使用SKSpriteNode作爲按鈕從GameScene轉換到UITabBarController

我有一個SKSpriteNode圖片,當點擊時,我希望視圖變回日曆視圖(第一個標籤欄項目)。我搜索了一種方法來做到這一點,並嘗試了我在StackOverflow上找到的各種建議,但沒有任何工作。與錯誤

"Unexpectedly found nil while unwrapping an optional"

應用崩潰我明白是什麼錯誤意味着,只要不是爲什麼我得到它。下面是相關的代碼(其中一部分我從這裏試圖弄清楚這一點了):

在GameScene.swift:

weak var viewController: GameViewController! 

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    let touch:UITouch = touches.first! as UITouch 
    let positionInScene = touch.locationInNode(self) 
    let touchedNode = self.nodeAtPoint(positionInScene) 

    if let name = touchedNode.name { 
     if name == "exit" { 
      self.viewController.gameOver() 
      self.removeFromParent() 
      self.view?.presentScene(nil) 
     } 
    } 
} 

在GameViewController.swift:

var currentGame: GameScene! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.tabBarController?.tabBar.hidden = true 
    if let scene = GameScene(fileNamed:"GameScene") { 
     // Configure the view. 
     let skView = self.view as! SKView 
     skView.showsFPS = false 
     skView.showsNodeCount = false 

     skView.ignoresSiblingOrder = true 

     scene.scaleMode = .AspectFill 

     scene.viewController = self 
     skView.presentScene(scene) 
     currentGame = scene 
    } 
} 

func gameOver() { 
    performSegueWithIdentifier("backToMain", sender: nil) 
} 

這是給出錯誤的行:

self.viewController.gameOver() 
+0

與此崩潰無關,但請注意'self.removeFromParent()'沒有任何作用。 SKScene是一個根節點,因此它可以從節點樹中刪除。當調用view.presentScene()時,舊場景被替換爲一個新場景('view.scene'被覆蓋),並轉換到新場景完成。 – Whirlwind

+0

謝謝,我從這個網站上的其他類似問題中得到了答案。認爲它可能有用,所以我把它扔在那裏。很高興知道它不會幫助我的情況。 –

回答

1

您的代碼是正確的;我認爲可能的問題是,如果您沒有傳送viewController的值,那麼您將呈現多個場景。要跟蹤此問題,請使用查找導航器(Cmd + 3)搜索presentScene,然後確保在之後每個呼叫都是,您已將viewController屬性的值轉移到新場景。

+0

非常感謝!這工作! –

0

我認爲只是從聲明中刪除'弱'控制器。您可以在提供錯誤的行上設置斷點,並查看viewController是否有值(在Xcode控制檯中嘗試使用self.viewController)。

+0

謝謝,但那並沒有解決這個錯誤。是的,當它崩潰時,self.viewController是零。我會繼續調試和學習,看看我能否弄清楚。 –