2016-10-10 8 views
0

私のストーリーボードエントリポイントとして機能するビューのViewDidLoadメソッドにif ... thenステートメントがあります。Segueは機能しません。理由はわかりません

基本的に、コアデータにデータがあるかどうかをチェックして、小さな「セットアップフォーム」を完了したことを示します。

コアデータが空であるか、アプリケーションが正しく設定されていないことがわかった場合は、自動的にセグを使用して設定ビューにキックバックする必要があります。

私のviewDidLoadメソッドは次のようになります。

override func viewDidLoad() { 
    super.viewDidLoad() 

    //Get any entries from the App Settings Entity 
    getAppSettings() 


    //If any entries are found, check to see if the setup has been completed 
    if (appSettings.count > 0) { 

     print("We found entries in the database for App Settings") 

     if (appSettings[0].setupComplete == false) { 
      print("Setup has not been completed") 
      self.performSegue(withIdentifier: "toAppSettings", sender: self) 
     } else { 
      print("Setup is completed") 
      //Load the settings into global variables 
      preferredRegion = appSettings[0].region! 
      usersName = appSettings[0].usersName! 
     } 

    } else { 
     print("We found no entries in the database for App Settings") 
     self.performSegue(withIdentifier: "toAppSettings", sender: self) 
    } 
} 

私はセグエが存在しないことを確認しました、と私は引用符でそれを持っているようにセグエの識別子が正確に(私もコピー&すべて貼り付けられていることそれらがすべて一貫していることを確認するためのインスタンス)。

私はまた、余分なマイルを行って、それが呼ばなっていたかどうかを印刷するには、「セグエの準備」の方法でチェッカーを入れて、そして誰が送信者がいた:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    print("We're getting ready to segue!") 
    print(segue.identifier) 
} 

これらのアイテムの両方が印刷されますログには、segueが認識されていることと、アプリがそれを起動しようとしていることがわかります。しかし、何らかの理由で私が理解できないことは、単に発射していないということです。

私はここで何が不足していますか?

答えて

2

私はのviewDidLoad

で、その後... if文を持っているしかし、それは問題です。 viewDidLoadこれはあまりにも早いです。すべてviewDidLoadは、ビューコントローラにビューがあることを覚えておいてください。それだけで意味があります。そのビューはまだインターフェイスにはなく、ビューコントローラ自体がビュー階層にいなくてもかまいません。オブジェクト空間に座っているだけです。あなたはここから踏み込むことはできません。セグメンテーションするものは何もありません。

viewDidAppearまでお待ちください。それで問題が解決した場合は、viewWillAppearに戻してみることもできますが、何も保証するものではありません。これらのメソッドは複数回呼び出すことができることに注意してください。したがって、このセグが1回だけ発生するようにフラグを設定する必要があります。

関連する問題