我知道UserDefaults只是为了保存偏好,但这些偏好是持久的 - 保存在UserDefaults中的值是通过无限数量的应用程序启动维护的,只要应用程序保持安装状态,就可以随时读取它们。对?UserDefaults.standard值可能无法读取吗?
这些值可能会被清除,或者在任何时候都无法正确访问吗?经过多年使用UserDefaults并根据它们所保持的值的一致性,我现在在工作的一天中看到过两次,当我的应用程序启动并检查了一个简单的布尔值时,该值不正确。
if defaults.bool(forKey: "beenLaunched") {
每次启动应用程序时都会运行此代码。如果这个值是真的,我什么也不做,但如果它是假的,我设置一些值,因为这是用户第一次启动应用程序,然后我调用defaults.set(true,forKey:“beenLaunched”)和defaults.set(0,forKey:“eventsCompleted”)和其他一些值。
我发现this thread on the Apple forums其中Eskimo说:“对于中央的NSUserDefaults方法,-objectForKey:,nil的结果意味着该值不可用,但是没有办法区分这个键不存在,并且此值可以'因为用户的默认值是离线的,所以不会被提取。“ (这似乎是参考background launching while a device is locked的具体情况)
我可以考虑一种更安全的方式来保存诸如Bool值,Int或String之类的简单数据,但使用UserDefaults来处理这些类型的价值观一直是简单,直接和可靠的。任何人都可以在这件事上留言,如果我错误地相信UserDefaults的持久性?
谢谢!
在设置值之后是否调用了'NSUserDefaults :: synchronize()'? – Brandon
17年来一直使用Cocoa框架,这不是它的工作原理。 :-)没有麻烦阅读该线程,但没有,它永远不会“脱机”(甚至不知道这是什么意思*)。 –
@Brandon不,我通常不会同步,但从来没有问题 – RanLearns