Swift 3 - UserDefaults无理由自动清除

时间:2017-07-18 05:46:58

标签: ios swift3 userdefaults

我让用户使用UserDefaults登录,但有时用户没有任何理由退出。当我调试这个案例时,我发现UserDefault为null!

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

修改

以下是一些代码:

当用户登录时,我使用以下方法保存令牌:

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")为空。虽然我确定我没有清除价值

1 个答案:

答案 0 :(得分:-1)

NSUserDefaults字符串也可能被悬空指针过度释放。如果将自动释放的对象分配给应该保留的位置,并且在其位置分配NSUserDefaults字符串,那么"所有者"解除分配的对象尝试释放它,它将释放此字符串。