Swift 3 - UserDefaults自动清除无理由

Swift 3 - UserDefaults自动清除无理由

问题描述:

我保持用户使用UserDefaults登录,但有时用户无理由退出。当我调试这种情况时,我发现UserDefault为空!Swift 3 - UserDefaults自动清除无理由

注意:除非用户点击注销按钮,否则我不清除这些值。

编辑:

下面是一些代码:

当用户登录时,我使用保存令牌:

UserDefaults.standard.set("Bearer \(actualJson["access_token"].stringValue)", forKey: "access_token") 
UserDefaults.standard.set("\(actualJson["refresh_token"].stringValue)", forKey: "refresh_token") 
UserDefaults.standard.synchronize() 

每次我从服务器获取401错误(令牌到期)我使用refresh_token得到新的:

AccountService.refreshToken(refreshToken: UserDefaults.standard.object(forKey: "refresh_token") != nil ? UserDefaults.standard.string(forKey: "refresh_token")! : "", callback: { (json) in 

    // set user defaults 
    UserDefaults.standard.set("Bearer \(json["access_token"].stringValue)", forKey: "access_token") 
    UserDefaults.standard.set("\(json["refresh_token"].stringValue)", forKey: "refresh_token") 
    UserDefaults.standard.synchronize() 
}) 

在AppDelegate中didFinishLaunchingWithOptions方法:

if UserDefaults.standard.object(forKey: "access_token") != nil && UserDefaults.standard.string(forKey: "refresh_token") != "" { 
      // go to home 
} 

在前面的代码,UserDefaults.standard.string(forKey: "refresh_token")为空。虽然我确定我没有清除该值

+2

没有看到代码就无能为力。请检查您是否添加了用于清除appdelegate或其他文件中的userdefaults的代码。 –

+0

@DSDharma我更新了这个问题 – nouf

+1

也许服务器的结果不好,当你刷新令牌时,比如'json [“refresh_token”]。stringValue'为零。 –

NSUserDefaults字符串也可能会被悬挂指针过度释放。如果一个自动释放的对象被分配到应该保留的地方,并且NSUserDefaults字符串被分配到它的位置,当释放对象的“所有者”试图释放它时,它将会释放该字符串。