perform segue with identifier wont work in swift 2

2020-02-01 08:07发布

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

4条回答
smile是对你的礼貌
2楼-- · 2020-02-01 08:48

Swift version:

class CustomSegue: UIStoryboardSegue {
    override func perform() {

        let src = self.sourceViewController
        let dst = self.destinationViewController
        src.navigationController?.pushViewController(dst, animated: true)
    }
}
查看更多
虎瘦雄心在
3楼-- · 2020-02-01 08:49

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.

查看更多
Fickle 薄情
4楼-- · 2020-02-01 08:54

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.

查看更多
Explosion°爆炸
5楼-- · 2020-02-01 08:58

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)
    }

}
查看更多
登录 后发表回答