iPhone 7 NSUserDefaults 变成零

Posted

技术标签:

【中文标题】iPhone 7 NSUserDefaults 变成零【英文标题】:iPhone 7 NSUserDefaults turning into nil 【发布时间】:2017-02-01 18:41:19 【问题描述】:

我有一部 iPhone 7,我也将它用于开发。我注意到在我的应用程序中,我将用于自动登录的会话令牌存储到 NSUserDefaults 中。但有时,如果不删除它,会话令牌为零,自动登录不起作用。这也发生在其他应用程序上,有时它会要求我再次登录,尽管我已经登录了。我猜想大多数应用程序使用的 NSUserDefaults 以某种方式被删除了。有人遇到类似问题吗?

class func setSessionToken(_ token: String)
        let defaults = UserDefaults.standard
        defaults.setValue(token, forKey: sessionTokenKey)
        defaults.synchronize()
    

class func getSessionToken()->String?
        let defaults = UserDefaults.standard
        return defaults.string(forKey: sessionTokenKey)
    

【问题讨论】:

您能否在defaults.setValue(token, forKey: sessionTokenKey) 行之前添加print() 语句并为我打印出token?此外,您应该COMMAND+SHIFT+F 并在搜索字段中粘贴“forKey: sessionTokenKey”,以确保您不会在项目中的其他任何地方删除该值。 请注意,从 ios 8 开始,不再需要调用UserDefaults.synchronize()。“因为此方法会定期自动调用,请仅在无法等待自动同步时使用此方法(例如,如果您的应用程序即将退出)..." 【参考方案1】:

当运行 iOS8 或 9 模拟器,然后运行 ​​iOS10 模拟器并且 NSUserDefaults 在模拟器中停止工作时,通常会出现此问题。

但是,在您的情况下,如果它在 iPhone 中也不起作用。您可以使用最新版本的 Xcode8 进行尝试。

【讨论】:

如果 Xcode 8.2.1 官方已经发布了一个多月,为什么会有人使用 Xcode 8 beta 2? 是的,你是对的。我已经通过这个链接forums.developer.apple.com/message/143155#143155

以上是关于iPhone 7 NSUserDefaults 变成零的主要内容,如果未能解决你的问题,请参考以下文章

iPhone:NSUserDefaults 存储在哪里?

iPhone 和 NSUserDefaults

iPhone:在应用程序被杀死时保留 NSUserDefaults 值

NSUserDefaults:保存的数字始终为 0,iPhone

iPhone NSUserDefaults

告诉程序找不到保存数据时该怎么办 NSUserDefaults, iPhone