2
votes

I have a navigation controller, with a table view. When I press a cell, the detail view controller opens.

In my root view controller I have :

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "detailview" {    
        var destination:DetailViewController = segue.destinationViewController as DetailViewController
        destination.delegate=self   
    }
}

In my detail view controller I have a back button :

@IBAction func back() {        
    self.navigationController?.popViewControllerAnimated(true)    
}

The issue is, after 2 go to and return, my app crashes when I go back on the root view controller pressing back button. The console doesn't give me errors. It just crashes.

I think I have forgotten to unwind the segue. So in my detail view controller I added :

@IBAction func unwindToViewController(segue: UIStoryboardSegue) {
    println("unwind function")
}

I connect this function to my back button with "exit" in my storyboard.

When I run my app, If I press on the back button, the console doesn't display my print "unwind function", so unwindToViewController isn't called. Why ?

And my app still crashes...

2

2 Answers

3
votes

Your unwindToViewController method should be placed in your root viewController, then ctrl-drag from the button in the detailViewController to the Exit icon in InterfaceBuilder. Choose that method in the popup menu.

Another approach would be to declare a protocol with a function in the rootViewController that is called from the detailViewController. You already set the rootViewController as the delegate of the detailViewController. Within that function you call dismissViewController.

0
votes

Swift answer...

I had a similar problem. The func: "segueForUnwindingToViewController(toViewController: UIViewController, fromViewController: UIViewController, identifier: String?) -> UIStoryboardSegue" was never called.

Solution:

since I didn't have a "UINavigationController", because I simply embeded the app in a Navigation Controller, I created a UINavigationController subclass for the Navigation Controller and added the function named above on it. Now the app calls "segueForUnwindingToViewController"