I'm presenting a tutorial of 4 UIViewController when my app starts the first time. Every UIViewController has a Button with a segue presenting the next ViewController. The last ViewController has a button "Let's start" which should dismiss the tutorial completely.
Problem: It this dismiss all ViewControllers except the first. I don't understand why?!
What I expect:
On the last ViewController4 I'm calling the dismissIntroduction() function of the first ViewController, so I except ALL ViewControllers (ViewController1 included) should disappear. When I put a button on the first ViewController and call the function "dismissIntroduction()" it disappears.
ViewController 1 (WelcomeViewController):
protocol WelcomeViewDelegate {
    func dismissIntroduction()
}
class WelcomeViewController: UIViewController, WelcomeViewDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    func dismissIntroduction() {
        self.dismissViewControllerAnimated(true, completion: nil)
    }
    // MARK: - Navigation
    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        let destination = segue.destinationViewController as! ViewController2
        destination.delegate = self
    }
}
ViewController 2:
class ViewController2: UIViewController {
    var delegate:WelcomeViewDelegate?
    override func viewDidLoad() {
        super.viewDidLoad()
    }        
    // MARK: - Navigation
    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        let destination = segue.destinationViewController as! ViewController3
        destination.delegate = self.delegate
    }
}
ViewController 3:
class ViewController3: UIViewController {
    var delegate:WelcomeViewDelegate?
    override func viewDidLoad() {
        super.viewDidLoad()
    }        
    // MARK: - Navigation
    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        let destination = segue.destinationViewController as! ViewController4
        destination.delegate = self.delegate
    }
}
ViewController4 (the last one):
class ViewController4: UIViewController {
    var delegate:WelcomeViewDelegate?
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    @IBAction func pressLetsStart(sender: AnyObject) {
        self.delegate!.dismissIntroduction()
    }
}
EDIT: I got it working, when I put the dismissViewControllerAnimated function TWO times!?
func dismissIntroduction() {
    self.dismissViewControllerAnimated(true, completion: nil)
    self.dismissViewControllerAnimated(true, completion: nil)
}
But why? I don't understand the logic behind...
 
    