Мое намерение - показать мои InitialViewController
только один раз для каждого пользователя.
Код внутри didFinishLaunchingWithOptions
должен проверять при запуске, является ли значение ключа UserDefaults firstTime
все еще истинным.
Если нет, он не должен показывать InitialViewController
.Если это правда, и VC отображается, его кнопка (см. 2-й код ниже) должна установить firstTime
в false, чтобы предотвратить отображение InitialViewController
при следующем запуске приложения.
Я считаю, что выяснил проблему, а именно: defaults.set(true, forKey: "firstTime")
внутри didFinishLaunchingWithOptions
:
Каждый раз, когда приложение запускается, оно игнорирует тот факт, что ключ мог быть установлен на false
впредыдущий старт, так как он в любом случае устанавливает его в значение true.
Возможное решение может состоять в том, чтобы проверить, был ли firstTime
уже установлен, если это так, он не установит firstTime
снова. Но я пока не смог найти возможный подход.Вот где мне нужна ваша помощь .
Удаление также не поможет, поскольку при первом запуске приложения этот ключ должен существовать и иметь значение true
, чтобы отображать InitialViewController
впервое место.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if let rvc = self.window?.rootViewController {
let defaults = UserDefaults.standard
defaults.set(true, forKey: "firstTime")
if defaults.bool(forKey: "firstTime") == true {
let vc = rvc.storyboard!.instantiateViewController(withIdentifier: "InitialViewController")
self.window!.rootViewController = vc
}
}
return true
}
@IBAction func buttonStart(_ sender: UIButton) {
if (nameInput.text != "" && startKmInput.text != "") {
let defaults = UserDefaults.standard
defaults.set(false, forKey: "firstTime")
performSegue(withIdentifier: "goToSecond", sender: self)
}
}