2017-04-14 4 views
0

Xcode 8.3とiOS 10.3を使用しているSwift 3プロジェクトでは、プッシュするナビゲーションコントローラを取得します。私はそれを押すために使用しようとするまで、アプリケーションは、ナビゲーションコントローラで実行されます。すべては、アプリケーションのクラッシュを引き起こす最後の行まで、fatal error: unexpectedly found nil while unwrapping an Optional valueです。私はストーリーボードを使いたくないのですが、この質問のポイントはストーリーボードなしでこのタスクを達成する方法です。プログラムで作成したUINavigationControllerをプッシュできません

アプリケーションデリゲートコード

class AppDelegate: UIResponder, UIApplicationDelegate { 

var window: UIWindow? 

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

     window = UIWindow(frame: UIScreen.main.bounds) 

     window?.makeKeyAndVisible() 

     window?.rootViewController = UINavigationController(rootViewController: MainViewController()) 

} 

ビューコントローラ:

import UIKit 

class MainViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     view.backgroundColor = .white 

     let navController = navigationController 

     let myProfileViewController = MyProfileViewController() 

     navController!.pushViewController(myProfileViewController, animated: true) 

    } 
}   

答えて

1

移動

let navController = navigationController 
let myProfileViewController = MyProfileViewController() 

navController!.pushViewController(myProfileViewController, animated: true) 

のようにそれを初期化します。

viewDidLoadには、親ナビゲーションコントローラが設定されていないため、そこからアニメーションを開始しないでください。

0

は、エディタのメニューからMainViewController &に、ストーリーボードにストーリーボードクリックで をナビゲーションコントローラを追加することができ、ナビゲーションコントローラを介してナビゲーションコントローラ&プッシュを追加以下のコードで示します。

let vc = self.storyboard?.instantiateViewController(withIdentifier: "MyProfileViewController") as! MyProfileViewController 
    self.navigationController?.pushViewController(vc, animated: true) 

ストーリーボードの識別子が正しいことを確認してください。 &ナビゲーションコントローラコードフォームAppDelegateクラスを削除します。

+0

私はストーリーボードを使いたくありません。私はストーリーボードでこれを行う方法を知っています、私はこれをプログラムで行う方法を知りたいのですが、あなたの応答に感謝します。 – markhorrocks

0

最初のコードの中で、この enter image description here

のようなあなたのナビゲーションコントローラに名前を与えるには、viewDidLoadからviewDidAppearにこの let nav = (UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "yourNavigation") as! UINavigationController); nav.pushFrontViewController(MainViewController(), animated: true); window?.rootViewController = nav

+0

私のnavコントローラはプログラムによって作成されましたが、ストーリーボードには何もありません。 – markhorrocks

+0

私にコードを提示して – adam

+0

これはそれ以上です。エラーを再現するのに十分なはずです。 – markhorrocks

関連する問題