如何正确地segue到不同的ViewController

时间:2015-10-07 04:46:55

标签: ios swift segue viewcontroller

您好我的代码设置应该正确地从GameScene转到另一个视图控制器mainMenuViewController。我为实现这个目的而设置的代码是

var viewController: GameViewController!
func segue() {
    viewController.dismissViewControllerAnimated(true, completion: nil)
    SettingsViewController.delete(self)
}

在GameViewController中

class GameViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    let skView = view as! SKView
    let scene = GameScene(size: skView.bounds.size)

    skView.showsFPS = true
    skView.showsNodeCount = true
    skView.ignoresSiblingOrder = false
    //skView.showsPhysics = true
    scene.scaleMode = .AspectFill
    skView.presentScene(scene)        
    scene.viewController = self
}

}

在点击SKLabelNode时调用。我收到了使用它的建议,因为mainMenu是当玩家开始游戏时首次加载的场景,并且他们转向gameScene所以我被告知要解雇GameScene,而不是每次创建一个新的segue。我收到错误'致命错误:在展开可选值时意外发现nil',并且每当按下按钮时都会崩溃。我假设它正在谈论viewController。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

如果您正确理解了您的问题,那么您正试图解雇GameViewController。但方法dismissViewControllerAnimated仅解除您当前呈现的控制器。因此,当您的游戏视图控制器没有呈现任何内容时,它无法解除它。正如你所说的从代码到GameViewController解雇他所呈现的控制器,它会尝试按你的意愿去做,所以他得到了他所呈现的视图控制器的属性并尝试解除它,但是该属性是零,所以这样的错误得到。要解决此问题,您应该致电viewController.presentingViewController.dismissViewControllerAnimated(true, completion: nil)。 属性presentsViewController返回显示你的控制器,在你的情况下呈现GameViewController的控制器。当你得到这个控制器时,你可以解雇他所呈现的控制器(在你的情况下,控制器是你的GameViewController)。所以逻辑就是说'#34;父母"有权解雇自己的控制器(GameViewController)

答案 1 :(得分:1)

我需要查看您的代码。它现在接缝,你试图调用方法删除来查看控制器,但据我所知,视图控制器没有这样的。所以认为这是你的程序中的其他错误,主要是你将Noble_Ninja.SettingsViewController设置为期望有这种方法的其他对象。这是我的预测,我无法清楚地说出任何事情,因为我只有异常描述。尝试在代码中找到你调用此方法的位置,而不是在那里放置制动点,当程序在制动点上停止时在控制台中写入(日志) - (po NAME_OF_INSTANCE_THAT_CALLS_SUCH_METHOD) - ,它将显示实际的实例类型,所以有了这个信息,你可以检测哪里是真正的问题。祝你好运