2017-03-07 11 views
0

私はsegueを実行するためにifステートメントを使用しています。私は正常に実行されるたびにifステートメントにメッセージを出力します。しかし、セグが実行されていないと私はなぜわからない。実行中ではない

override func viewDidLoad() { 
    super.viewDidLoad() 

    firstField.delegate = self 
    signUpButtonOutlet.isEnabled = false 
    // Do any additional setup after loading the view. 

    let fetchRequest: NSFetchRequest<Check> = Check.fetchRequest() 

    do { 
     //go get the results 
     let searchResults = try getContext().fetch(fetchRequest) 

     //I like to check the size of the returned results! 
     print ("num of results = \(searchResults.count)") 

     //You need to convert to NSManagedObject to use 'for' loops 
     for check in searchResults as [NSManagedObject] { 
      //get the Key Value pairs (although there may be a better way to do that... 
      print("the value was\(check.value(forKey: "isLoggedIn"))") 

      if (check.value(forKey: "isLoggedIn") != nil) { 
       self.performSegue(withIdentifier: "loggedInTrue", sender: self) 
       print("if statement ran") 
      } 


     } 


    } catch { 
     print("Error with request: \(error)") 
    } 

} 
+1

にそのコントローラの識別子を設定する必要があるでしょう? –

+0

ちょうど@MrugeshTankのようにviewdidappearにあなたのsegueを入れて、あなたはviewdidloadでセグをすることはできません – rudydydy

+0

これは、これを行うための最良の方法ではない、あなたは本当にこの変数をチェックすることができますユーザーデフォルトあなたのアプリケーションは負荷をかけて委任します。正しいコントローラを表示してください – Devster101

答えて

1

このための最良のアプローチは、ユーザがすでにログインしているかどうかをチェックした後appDelegateから「LOGGEDIN」コントローラをロードすることです。だから、

用アプリケーションデリゲートのdidFinishLaunchingWithOptionsメソッドの例では、ユーザーがログインしているかどうかを確認するためにデフォルトをチェックします。

このため明らかに

0は、ユーザーが実際にログインしたときに

UserDefaults.standard().setBool(true, forKey: "logged_in") 

一つあなたが、さに注意してください、あなたの実際のストーリーボードにYOURSTORYBOARDNAMEを変更する必要があります事など。trueにLOGGEDIN変数を設定する必要が動作するようにまた、あなたは `viewDidAppear()`にごperformSegueコードを移動しようとしなかったストーリーボード

enter image description here

1

viewDidLoadにログインステータスを格納し、viewDidAppearでperformSegueを実行します。ログインステータスがtrueの場合、最初のViewControllerが非表示になります。

override func viewWillAppear(_ animated: Bool) { 
    if (isloggedIn != false) { 
     self.view.isHidden = true 
    } else { 
     self.view.isHidden = false 
    } 
} 

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(true) 
    if (isloggedIn != false) { 
     self.performSegue(withIdentifier: "loggedInTrue", sender: self) 
    } 
} 

OR

dispatch_async(dispatch_get_main_queue()) { 
    self.performSegueWithIdentifier("loggedInTrue", sender: self) 
} 
+0

'viewdidload'の' performSegue'を呼び出したかどうかはなぜですか? –

+0

'viewDidLoad'では' performSegue'は呼び出されません。 'viewDidLoad'で呼び出すには' dispatch_async(dispatch_get_main_queue()){ self.performSegueWithIdentifier( "loggedInTrue"、送信者:self) }のように呼び出す必要があります。 –

+0

ハッハッハ、不要なメモリを増やす –

関連する問題