perform segue with identifier wont work in swift 2

徘徊边缘 提交于 2019-12-17 16:48: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


回答1:


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.




回答2:


Swift version:

class CustomSegue: UIStoryboardSegue {
    override func perform() {

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



回答3:


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.




回答4:


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

}


来源:https://stackoverflow.com/questions/32309909/perform-segue-with-identifier-wont-work-in-swift-2

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!