当用户登录应用程序时,我一直在使用此代码执行自定义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
答案 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)
}
}