执行具有标识符的segue不会在swift 2

时间:2015-08-31 11:12:03

标签: ios iphone swift2

当用户登录应用程序时,我一直在使用此代码执行自定义segue:

dispatch_async(dispatch_get_main_queue()){

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

}

我目前在perpareForSegue中有这个代码(我不完全确定我是否需要它)

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

每次尝试执行segue时,我都会收到以下错误:

  

2015-08-31 11:56:28.998 ICEFLO [3858:651041] ***由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:'无法执行带标识符的segue& #39; showSTPS&#39 ;. segue必须具有performHandler,或者必须覆盖-perform。'

任何有关该怎么做的建议都将不胜感激 - 请注意这是针对swift2 / ios9

-Yogi

4 个答案:

答案 0 :(得分:33)

确保在故事板中,segue类型未设置为自定义。如果将其设置为自定义,则需要提供自己的自定义segue类。

答案 1 :(得分:4)

Swift版本:

class CustomSegue: UIStoryboardSegue {
    override func perform() {

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

答案 2 :(得分:3)

如果您的segue设置为"自定义",则需要覆盖执行方法。您可以关注this example

基本上创建一个继承自UIStoryboardSegue的类,如下所示:

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

我认为这段代码对您有用。

答案 3 :(得分:1)

不要打电话给超级......

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

}