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 值