У меня есть контроллер Onboarding, когда пользователь завершил настройку Onboarding, я записываю значение в UserDefaults
и затем отклоняю OnboardingViewController.
Однако мой базовый viewcontroller возвращает их обратно во входной поток, поскольку UserDefaults.standard.bool(forKey: "ONBOARDING|COMPLETE")
возвращает значение false.
Если я перезапущу мое приложение, оно вернет true, и они будут переведены на правильный VC.
My Base ViewController
class ViewController: UIViewController {
var onboardingComplete: Bool {
get {
return UserDefaults.standard.bool(forKey: "ONBOARDING|COMPLETE")
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print(UserDefaults.standard.bool(forKey: "ONBOARDING|COMPLETE"))
print(onboardingComplete)
setBaseViewController()
}
fileprivate func setBaseViewController() {
if onboardingComplete {
print("has completed onboarding")
} else {
let layout = UICollectionViewFlowLayout()
navigationController?.present(OnboardingController(collectionViewLayout: layout), animated: true, completion: { })
}
}
}
В моем встроенном контроллере есть метод, с помощью которого я устанавливаю значение как завершенное
@objc func handleCompleteOnboarding() {
dismiss(animated: true) {
DispatchQueue.main.async {
UserDefaults.standard.set(true, forKey: "ONBOARDING|COMPLETE")
}
}
}