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.
Шаги, чтобы попытаться найти проблему:
- Не могли бы вы попробовать установить точку останова и посмотреть, что идет первым, а что вторым?
- Попробуйте распечатать из
defaults
сразу после назначения там. - Просто попробуйте получить данные не во ViewDidLoad, а позже. Например, при нажатии кнопки. Просто чтобы увидеть, есть ли он там в первый раз (но не только во второй)
Вопрос: где вы устанавливаете значение по умолчанию?
PS: Также я бы не использовал UserDefaults для этого, но да, это другой вопрос.
К сожалению, это не может обеспечить точное решение, так как требует больше информации / кода от вашей отладки. Пожалуйста, попробуйте варианты выше. Надеюсь, поможет.