2016-10-27 5 views
1

Я создал некоторую простую систему, если у userdefaults есть ключ «isWalkthroughPresented». Если ключ false, тогда покажите walkthourghViewController. Если у него нет ключа, проверьте его в базе данных.userdefaults не сохраняется после первого раза

Однако он не устанавливает ключ после первого раза. Но сохраняет после некоторых запусков. В чем проблема?

Это код, я использую внутри viewDidAppear после пользователь вошел в систему и видит второй ViewController:

let userDefaults = UserDefaults.standard 

     if !userDefaults.bool(forKey: "isWalkthroughPresented") { 

      presentWalkthrough() 

      userDefaults.set(true, forKey: "isWalkthroughPresented") 

     }else{ 
      checkIfCurrentUserHasOpenedTheAppBefore()//this just checks if user in db has the value 
     } 

ответ

2

После установки значения настройки по умолчанию пользователя, вызовите эту функцию, чтобы заставить сохранения изменений в базе данных:

//... 
userDefaults.set(true, forKey: "isWalkthroughPresented") 
userDefaults.synchronize() 

Обычно метод synchronize() вызывается периодически для сохранения настроек кэшированных пользователей в базе данных. Интервал между вами установить "isWalkthroughPresented" и прочитать его снова не достаточно, чтобы synchronize() получить автоматически вызывается.

Смотрите также эти детали от method documentation:

Поскольку этот метод [синхронизации()] автоматически вызывается через определенные промежутки времени, использовать этот метод, только если вы не можете ждать автоматической синхронизации (например, если ваше приложение собирается выйти), или если вы хотите обновить пользовательские значения по умолчанию на том, что находится на диске, даже если вы не внесли никаких изменений.

+0

Ничего себе, это полностью. Спасибо за объяснение. Кто-то однажды сказал мне не использовать его, но я не помню причину, поэтому я не использовал, но должен. – Xistence

Смежные вопросы