2016-12-21 10 views
3

ユーザーがすでにログインしているときに、ViewControllerを読み込み時に切り替えたい 問題:ユーザーが「true」に等しいときにビューが変更されませんでした...Swift 3/Xcode 8.2 - viewDidLoadのスイッチ表示が機能しない

ありがとうございます!

override func viewDidLoad() { 
    super.viewDidLoad() 

    var user: String? 
    user = UserDefaults.standard.value(forKey: "loginSuccessfull") as? String 

    if user == "true" { 
     let vc = self.storyboard?.instantiateViewController(withIdentifier: "SecondView") as UIViewController! 
     self.show(vc!, sender: vc) 
    } 

    // Do any additional setup after loading the view, typically from a nib. 
} 
+4

がviewDidLoad' 'で新しいVCを提示決しては、' viewWillAppear'または 'viewDidAppear'でそれを行います – Tj3n

答えて

3

viewDidLoadメソッドからコードを削除し、以下の方法を使用します。代わりのviewDidLoadでの書き込みロジックの

override func viewDidAppear() { 
    guard let user = UserDefaults.standard.string(forKey: "loginSuccessfull"), user == "true" else { 
     return 
    } 
    let vc = self.storyboard?.instantiateViewController(withIdentifier: "SecondView")! 
    self.present(vc, animated: true) 
} 
0

例えば、現在のViewControllerを提示する前にそれを書きます アプリの起動時にチェックしたい場合は、ユーザーがdidFinishLaunchingメソッドにログインしているかどうかをチェックし、それに応じてrootViewControllerを設定します。

他のviewControllerから提示する場合は、最初にユーザーのログインステータスを確認し、viewDidLoadをチェックインする代わりにviewcontrollerを表示します。

また、いくつかの遅延の後に操作を実行することによって、viewcontrollerを表示できます。

DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { 
     // present view contoller 
    } 
2

あなたはviewWillAppear()viewDidAppear()のいずれかで第二ビューコントローラを表示するコードを配置する必要があります。 viewDidLoad()中にあなたのViewControllerのプロパティの一部が定義されていないと、別のViewControllerを提示する準備ができていないということで

override func viewDidAppear() { 
    super.viewDidAppear() 

    var user: String? 
    user = UserDefaults.standard.value(forKey: "loginSuccessfull") as? String 

    if user == "true" { 
     let vc = self.storyboard?.instantiateViewController(withIdentifier: "SecondView") as UIViewController! 
     self.show(vc!, sender: vc) 
    } 

    // Do any additional setup after loading the view, typically from a nib. 
} 

理由。あなたはそれ非同期にする必要があり

1

は、ちょうどこのような任意の遅延のための必要はありません。

override func viewDidLoad() { 
    super.viewDidLoad() 

    var user: String? 
    user = UserDefaults.standard.value(forKey: "loginSuccessfull") as? String 

    DispatchQueue.main.asyncAfter(deadline: .now()) { 
     if user == "true" { 
      let vc = self.storyboard?.instantiateViewController(withIdentifier: "SecondView") as UIViewController! 
      self.show(vc!, sender: vc) 
     } 
    } 

} 
関連する問題