After programmatically segueing, The ViewController has not been dismissed

234 Views Asked by At

When you press a button a custom segue is performed to start a game:

self.performSegueWithIdentifier("segueToGame", sender: nil)

I'm using sprite kit. I have settings in the GameViewController and GameScene such that you play until you lose and when you do the gameScene sends a message to the view controller telling it to segue back to the initial view controller. I do this as follows:

let notificationCenter = NSNotificationCenter.defaultCenter()

class GameViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

   /*
 All code to set the scene is there
 */
    skView.presentScene(scene)
    notificationCenter.addObserver(self, selector: "segueToHomeScreen", name: "segueToHomeScreen", object: nil)}

override func viewDidDisappear(animated: Bool) {
    if self.isBeingDismissed() {
        println("Dismissed Vc")
    }else {
        println("still here")
    }
}

func segueToHomeScreen(){
    self.performSegueWithIdentifier("segueToHomeScreen", sender: nil)
}

in my GameScene the code I used when you lose the game is:

func segueToHomeScreen() {
    notificationCenter.postNotificationName("segueToHomeScreen", object: nil)
}

The problem is the GameScene has not completely stopped when I segue back to the home screen. I found this out by two things. One, the viewDidDisapper function you see above, I get a log message of "still here". Two, in gameScene I used this

 override func update(currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */
     println("Scene On")
 }

When you lose the game and you are back at the home screen this function is still running. How can I stop the ViewController and GameScene from running after performing the segue to the home screen?

Mot sure if this is related but I also get an error message:

Warning: Attempt to present * on * whose view is not in the window hierarchy!

0

There are 0 best solutions below