UserDefaults не загружается в первый раз

У меня есть двухэтапный процесс входа в систему. На первом экране я сохраняю данные пользователя FB в UserDefaults.

Когда я загружаю второй ViewController, он должен загрузить изображение профиля пользователя и имя пользователя (которое я создаю, используя "полное имя"). На самом деле это работает во второй раз, когда я загружаю пользователя, но никогда в первый раз, есть ли какая-то задержка? Я уже пробовала UserDefaults.standard.synchronize() но это ничего не делает. Он даже печатает детали, так что я знаю, что это работает...

    let userName = fullName.replacingOccurrences(of: " ", with: "_")
    UserDefaults.standard.setValue(userName, forKey: "username")

    if let picture = result["picture"] as? NSDictionary , let data = picture["data"] as? NSDictionary, let url = data["url"] as? String {
        UserDefaults.standard.setValue(url, forKey: "userFBPicURL")

        let username = UserDefaults.standard.value(forKey: "username") as? String
        let profileImage = UserDefaults.standard.value(forKey: "userFBPicURL") as? String

        UserDefaults.standard.synchronize()

        print ("Details are User:",username, "profileImage:",profileImage)

а в новом вк после self.performSegue(withIdentifier: "UsernameSegue", sender: self):

override func viewDidLoad() {
    super.viewDidLoad()
    if let username = UserDefaults.standard.value(forKey: "username") as? String {usernameTextfield.text = username}
    if FBSDKAccessToken.current() != nil {loadFacebookProfileImage()}
}

1 ответ

Решение

Я думаю, что вы устанавливаете значение UserDefaults после выполнения segue или после вызова viewDidLoad.

Шаги, чтобы попытаться найти проблему:

  1. Не могли бы вы попробовать установить точку останова и посмотреть, что идет первым, а что вторым?
  2. Попробуйте распечатать из defaults сразу после назначения там.
  3. Просто попробуйте получить данные не во ViewDidLoad, а позже. Например, при нажатии кнопки. Просто чтобы увидеть, есть ли он там в первый раз (но не только во второй)

Вопрос: где вы устанавливаете значение по умолчанию?

PS: Также я бы не использовал UserDefaults для этого, но да, это другой вопрос.

К сожалению, это не может обеспечить точное решение, так как требует больше информации / кода от вашей отладки. Пожалуйста, попробуйте варианты выше. Надеюсь, поможет.

Другие вопросы по тегам