在我的 iPhone 应用程序中,我使用设置包来存储我的应用程序设置以及预定义的默认值。例如,包括一个默认设置为的拨动开关true
:
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>Show score</string>
<key>Key</key>
<string>preference_show_score</string>
<key>DefaultValue</key>
<true/>
</dict>
当我使用检索此值时
let showScore = UserDefaults.standard.bool(forKey: "preference_show_score")
有两个观察到的结果:
- 如果用户之前更改了设置,则将正确的设置分配给
showScore
。 - 如果用户没有触摸设置,则检索到的值
false
即使默认值应该是true
。
因此,实际设置只能在用户更改后才能读取,这使得默认值变得多余。
关于这个主题有很多 SO 帖子,但是,在阅读它们之后,我更加困惑。
有人建议复制应用程序本身的设置,但在这种情况下,设置应用程序提供了什么值?而且,显然,检索设置并非完全不可能——只是在用户更改它们之前。
其他一些答案说,问题与UserDefaults
在使用它们之前没有注册一次默认值有关。在这里,我不确定应该如何以及在哪里完成。AppDelegate
我已经在读取值本身的方法和方法中使用以下语句进行了尝试。事实上,根本不使用它似乎并没有什么不同。
UserDefaults.standard.register(defaults: [String:AnyObject]())
因此,根据我找到的所有信息,我想知道是否甚至可以使用默认值,如果可以,它是如何正确完成的?
而且,假设我也被迫在我的应用程序中存储默认值,应用程序如何知道何时使用它们,即用户是否更新了设置?