2017-08-27 12 views
0

録音APPで作業中です。準備機能を追加した後にナビゲーションバーが消える

私は、次の関数が用意用いて、第2のViewControllerにファイル名の配列を渡すことができ、私の最初の記録のViewControllerにナビゲーションコントローラを追加しようとしました:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let controller = segue.destination as? MainViewController 
    controller?.recordArray = recordingArray 
    self.present(controller!, animated: true, completion: nil) 
} 

しかし、シミュレータで実行したときに、ナビゲーションバーがで姿を消しましたEXC_BAD_ACCESS(コード= 2、アドレス= 0x7fff51edfff8)

:前記第二のコントローラとXcodeは警告

スレッド1を飛び出します

誰にも助言がありますか? ありがとう!

+0

プレゼンテーション時にコントローラのアンラップを強制しているのはなぜですか? – Abizern

+0

いいえ、実際に、なぜあなたはその方法でプレゼンテーションをしていますか? segueがプレゼンテーションを行う前にdestaonation view controllerを設定するだけです – Abizern

答えて

0

present(_:animated:completion:)prepare(for segue:)に電話しないでください。

prepare(for segue)は、segueが実行される直前に、segueが実行される直前に自動的に呼び出され、segueを実行する前に宛先viewcontrollerに送信するためのデータを準備したり、必要な計算を行います。ストーリーボードでセグを設定する必要があります。自動的に呼び出されるか、マニュアルセグの場合はperform(segue)を使用して呼び出す必要があります。これを実行すると、prepare(for segue)が呼び出されます。 2つの異なるメソッド(segueとpresent)を使用して別のviewcontrollerにナビゲートしようとしているので、なぜ別のナビゲーション関数を呼び出すのが問題であるかが分かります。

ストーリーボードでセグを設定していない場合は、設定しないとlet controller = segue.destination as? MainViewControllernilになるため、セグを設定する必要があります。

あなたはストーリーボードでセグエを設定したら、これはあなたの関数は次のようになりますどのようにされて:あなたはこの方法でVCを提示しようとすべきではない

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let controller = segue.destination as? MainViewController { 
     controller.recordArray = recordingArray 
     self.present(controller, animated: true, completion: nil) 
    } 
} 
0

、それはあなたがするためだけの場所ですセグが提示する前に宛先VCを設定してください

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    guard let controller = segue.destination as? MainViewController else { return } 
    controller.recordArray = recordingArray 
} 
関連する問題