Как я могу получить обновленное значение из UserDefaults? - PullRequest
0 голосов
/ 05 января 2019

У меня есть контроллер 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")
            }
        }
    }

1 Ответ

0 голосов
/ 05 января 2019

Вы устанавливаете значение в обработчике завершения.

Переместите это за пределы отклонения.

@objc func handleCompleteOnboarding() {
    UserDefaults.standard.set(true, forKey: "ONBOARDING|COMPLETE")
    dismiss(animated: true)
}

Вы, по сути, создали условие состязания между настройкой значения и вызываемым методом viewDidAppear.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...