2016-08-20 2 views
0

UITabBarControllerには2つのアイテムがあり、最初のものはちょうどUIWebViewのカレンダーです。 2番目のアイテムはSpriteKitのゲームシーンを持ち込み、タブバーを非表示にします(ゲームはフルスクリーンでなければなりません)。SKScriteNodeをボタンとして使用してGameSceneからUITabBarControllerに変換します

私はタップすると、私はカレンダービュー(最初のタブバーの項目)に戻って変更するビューをたいというSKSpriteNodeイメージを持っています。私はこれを行う方法を探し、ここでStackOverflowで見つかったさまざまな提案を試みましたが、何も動作していません。エラー

"Unexpectedly found nil while unwrapping an optional"

すると、アプリがクラッシュ私はちょうどなぜ私はそれを取得していない、そのエラーが何を意味するのか理解しています。

GameScene.swiftで:ここでは、関連するコード(これを理解しようとしたときに、私はここから取得した場所の一部)であるGameViewController.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) 
     } 
    } 
} 

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つからそれを得た。それがうまくいくと思ったので、私はそこに投げ込んだ。それが私の状況を助けるものではないことを知っていればよい。 –

答えて

1

コードは正しいです。私は可能性のある問題は、viewControllerの値を転送せずに、複数のシーンを提示しているということです。この問題を追跡するには、Findナビゲータ(Cmd + 3)を使用してpresentSceneを検索した後、プロパティの値をの後に新しいシーンに転送したときに、それぞれのコールがであることを確認します。

+0

ありがとう!これはうまくいった! –

0

私はちょうどビューの宣言から '弱い'を削除すると思いますコントローラ。エラーを示す行にブレークポイントを設定し、viewControllerに値があるかどうかを確認できます(Xcodeコンソールでself.viewControllerを試してみてください)。

+0

ありがとう、しかし、それはエラーを修正しませんでした。はい、self.viewControllerはクラッシュするとnilになります。私はデバッグを続け、私がそれを理解できるかどうかを知ることを学びます。 –

関連する問題