perform segue with identifier wont work in swift 2

I have been using this code to perform a custom segue when a user logs in to the application:

dispatch_async(dispatch_get_main_queue()){

                self.performSegueWithIdentifier("showSTPS", sender: self)

}

I currently have this code in my perpareForSegue (im not totally sure if i need it)

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
            if "showSTPS" == segue.identifier {
                }
}

And I am getting the following error every time I try to perform the segue:

2015-08-31 11:56:28.998 ICEFLO[3858:651041] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not perform segue with identifier 'showSTPS'. A segue must either have a performHandler or it must override -perform.'

Any suggestions on what to do would be greatly appreciated - please note that this is for swift2/ios9

-Yogi

Upvotes: 10

Views: 15514

Answers (4)

AMayes
AMayes

Reputation: 1767

Swift version:

class CustomSegue: UIStoryboardSegue {
    override func perform() {

        let src = self.sourceViewController
        let dst = self.destinationViewController
        src.navigationController?.pushViewController(dst, animated: true)
    }
}

Upvotes: 5

ingconti
ingconti

Reputation: 11646

do NOT call super...

class CustomSegue: UIStoryboardSegue {

    override func perform() {
        // super.perform() NOOO or crash!
        let src = self.sourceViewController
        let dst = self.destinationViewController
        src.navigationController?.pushViewController(dst, animated: true)
    }

}

Upvotes: 1

voghDev
voghDev

Reputation: 5791

If your segue is set to "Custom", you need to override the perform method. You can follow this example.

Basically create a class that inherits from UIStoryboardSegue, like this:

MyCustomSegue.h

@interface MyCustomSegue : UIStoryboardSegue
@end

MyCustomSegue.m

@implementation MyCustomSegue
- (void) perform {
    UIViewController *src = (UIViewController *) self.sourceViewController;
    UIViewController *dst = (UIViewController *) self.destinationViewController;

    [src.navigationController pushViewController:dst animated:YES];
}
@end

I think this code could work for you.

Upvotes: 3

user3673027
user3673027

Reputation: 486

Make sure that in your storyboard the segue type is not set to custom. If you set it to custom you'll need to provide your own custom segue class.

Upvotes: 47

Related Questions