web-dev-qa-db-ja.com

Swift 2)で識別子が機能しないセグエを実行する

私はこのコードを使用して、ユーザーがアプリケーションにログインしたときにカスタムセグエを実行しています。

dispatch_async(dispatch_get_main_queue()){

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

}

私は現在、このコードをperpareForSegueに持っています(必要かどうかは完全にはわかりません)

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

そして、セグエを実行しようとするたびに、次のエラーが発生します。

2015-08-31 11:56:28.998 ICEFLO [3858:651041] ***キャッチされなかった例外「NSInternalInconsistencyException」が原因でアプリを終了しています。理由:「識別子「showSTPS」でセグエを実行できませんでした。セグエにはperformHandlerが必要であるか、-performをオーバーライドする必要があります。

何をすべきかについての提案は大歓迎です-これはSwift2/ios9用であることに注意してください

-ヨギ

ストーリーボードで、セグエタイプがカスタムに設定されていないことを確認してください。カスタムに設定する場合は、独自のカスタムセグエクラスを提供する必要があります。

37
user3673027

Swiftバージョン:

class CustomSegue: UIStoryboardSegue {
    override func perform() {

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

セグエが「カスタム」に設定されている場合は、performメソッドをオーバーライドする必要があります。あなたは続くことができます この例

基本的に、次のように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
voghDev

スーパーとは呼ばないでください...

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

}
1
ingconti