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 被调用。

尝试查找问题的步骤:

  1. 能否请您尝试设置断点,看看先发生什么,然后发生什么?
  2. 尝试从 defaults 分配后立即打印。
  3. 请尝试不在 ViewDidLoad 中而是稍后获取数据。例如点击按钮。只是为了看看它是否也是第一次出现(但不仅是第二次出现)

问题:在哪里设置默认值?

PS:我也不会为此使用 UserDefaults,但是是的,这是一个不同的问题。

抱歉,这无法提供确切的解决方案,因为它需要更多 info/code 来自您的调试。请尝试上面的选项。希望对你有帮助。