UserDefaults 不是第一次加载
UserDefaults not loading first time
我有一个两步登录过程。在第一个屏幕上,我将 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)
之后的新 VC 中:
override func viewDidLoad() {
super.viewDidLoad()
if let username = UserDefaults.standard.value(forKey: "username") as? String {usernameTextfield.text = username}
if FBSDKAccessToken.current() != nil {loadFacebookProfileImage()}
}
我认为您将值设置为 UserDefaults after performing segue 或 after viewDidLoad 被调用。
尝试查找问题的步骤:
- 能否请您尝试设置断点,看看先发生什么,然后发生什么?
- 尝试从
defaults
分配后立即打印。
- 请尝试不在 ViewDidLoad 中而是稍后获取数据。例如点击按钮。只是为了看看它是否也是第一次出现(但不仅是第二次出现)
问题:在哪里设置默认值?
PS:我也不会为此使用 UserDefaults,但是是的,这是一个不同的问题。
抱歉,这无法提供确切的解决方案,因为它需要更多 info/code 来自您的调试。请尝试上面的选项。希望对你有帮助。
我有一个两步登录过程。在第一个屏幕上,我将 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)
之后的新 VC 中:
override func viewDidLoad() {
super.viewDidLoad()
if let username = UserDefaults.standard.value(forKey: "username") as? String {usernameTextfield.text = username}
if FBSDKAccessToken.current() != nil {loadFacebookProfileImage()}
}
我认为您将值设置为 UserDefaults after performing segue 或 after viewDidLoad 被调用。
尝试查找问题的步骤:
- 能否请您尝试设置断点,看看先发生什么,然后发生什么?
- 尝试从
defaults
分配后立即打印。 - 请尝试不在 ViewDidLoad 中而是稍后获取数据。例如点击按钮。只是为了看看它是否也是第一次出现(但不仅是第二次出现)
问题:在哪里设置默认值?
PS:我也不会为此使用 UserDefaults,但是是的,这是一个不同的问题。
抱歉,这无法提供确切的解决方案,因为它需要更多 info/code 来自您的调试。请尝试上面的选项。希望对你有帮助。