UserDefaults未首次加载

时间:2018-02-24 10:34:35

标签: ios swift fbsdk userdefaults

我有一个两步登录过程。在第一个屏幕上,我将FB用户的详细信息保存到UserDefaults。

当我加载第二个ViewController时,应该加载用户的个人资料图片和用户名(我使用" fullname "创建)。它实际上是我第二次加载用户,但从来没有第一次,是否有某种延迟?我已经尝试了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()}
}

1 个答案:

答案 0 :(得分:2)

我认为您在执行segue之后将值设置为UserDefaults ,或者在调用viewDidLoad之后将设置为

尝试查找问题的步骤:

  1. 你可以尝试设置断点,看看第一个是什么,第二个是什么?
  2. 在分配后立即尝试从defaults打印。
  3. 尝试获取数据不在ViewDidLoad中,但稍后。例如按钮点击。只是为了看它是否也是第一次(但不仅仅是第二次)
  4. 问题:您在哪里将值设置为默认值?

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

    很抱歉,这不能提供准确的解决方案,因为它需要您调试的更多信息/代码。请尝试上面的选项。希望它有所帮助。