2017-05-30 7 views
1

私はVC A上に作成されていない、私はプログラム的BをVCに行き、その後、VC BはVC Cperform(segueWithIdentifier:)クラッシュ)に行くために何seguesを持っていません。 私はセグを使ってVC Bに行くと、セグをコールしてVC Cに行くことができます。ませseguesはプログラム的

をVC A:ここ

がクラッシュし、私のコードです

// Method A (that does not crash) 
// self.performSegue(withIdentifier: "gotoB", sender: self) 

// Method B (that crashes) 
let dst = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "vcB") 
if let navigator = navigationController { 
    navigator.pushViewController(vc, animated: true) 
} 

VC B

self.performSegue(withIdentifier: "gotoC", sender: self) // crashes here 

事は、私はどこからでもVC Bに到達できるようにしたいということですしたがって、ナビゲーションコントローラを使用したプログラムによるプッシュ。私はこれがなぜ起こり、私が望むものを達成する方法を理解したいと思います。ありがとう。

+0

のためにあなたのストーリーボードにStoryboardIDを設定してくださいあなたはセグエ識別子「gotoCは」一度 –

+0

クラッシュログとは何ですか、それを確認する登録していますか? –

+0

@srinivasnはい、私はsegue 'gotoC'を持っています。なぜなら、Segueを使って' A'から 'B'に行くときに働くからです。しかし、 'navigationControler'を使って' B'を押すとクラッシュします。 – Dliix

答えて

1

どこからでもこのVCにアクセスしたい場合は、プログラムでストーリーボードからインスタンス化してから、それを提示/プッシュする必要があります。このような何か:

let storyboard = UIStoryboard(name: "Main", bundle: Bundle(for: self)) 

    let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewControllerId") 

    navigationController.push(viewController, animated: true) 

このビューコントローラ

+0

あなたの素早い答えをありがとう、しかし、これは私が現時点でやっていることです。しかし、私がこのメソッドを使うと、createViewControllerにはseguesがなく、 'perform(segueWithIdentifier :)'がクラッシュします。どうしてか分かりません。ストーリーボードを介してVCを作成すると、すべてのセグを正しくリンクする必要がありますか? – Dliix

+0

あなたは全くセグを使う必要はありません –

+0

はい私は、他のプロジェクトからvc 'B'がvc' C'にリダイレクトし、セグを使用しているので、そうします。私はこの行動事象を変更することはできませんが、私はしたいと思います。 – Dliix