アプリを初めてロードするときにセグエを実行しようとしています。デバッガーで印刷メッセージを確認できますが、PerformSegueが機能していません。エラーは発生しません。誰かが何が悪いのか教えてもらえますか?
import UIKit
import LocalAuthentication
let isFirstLaunch = UserDefaults.isFirstLaunch()
extension UserDefaults {
// check for is first launch - only true on first invocation after app install, false on all further invocations
// Note: Store this value in AppDelegate if you have multiple places where you are checking for this flag
static func isFirstLaunch() -> Bool {
let hasBeenLaunchedBeforeFlag = "hasBeenLaunchedBeforeFlag"
let isFirstLaunch = !UserDefaults.standard.bool(forKey: hasBeenLaunchedBeforeFlag)
if (isFirstLaunch) {
UserDefaults.standard.set(true, forKey: hasBeenLaunchedBeforeFlag)
UserDefaults.standard.synchronize()
}
return isFirstLaunch
}
}
class loginVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if isFirstLaunch == false {
performSegue(withIdentifier: "setPassword", sender: self)
print("testFalse") }
else {
performSegue(withIdentifier: "setPassword", sender: self)
print("testTrue")}
// Do any additional setup after loading the view, typically from a nib.
}
ViewDidLoad()内からperformSegue()を使用することはできません。それをviewDidAppear()に移動します。
ViewDidLoad()の時点では、現在のビューはまだウィンドウにアタッチされていないため、まだセグエすることはできません。
セグエをDispatch.main.async
に入れることもできると思います
DispatchQueue.main.async {
if isFirstLaunch == false {
performSegue(withIdentifier: "setPassword", sender: self)
print("testFalse")
} else {
performSegue(withIdentifier: "setPassword", sender: self)
print("testTrue")
}
}
別のアプローチを使用することもできます。メインウィンドウのrootViewController
を、isFirstLaunch
booleanに応じて選択したビューコントローラーに変更します。
UIApplication.shared.keyWindow?.rootViewController = setPasswordViewController