在我的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]())
因此,根据我发现的所有信息,我想知道是否甚至可以使用默认值,如果可以,则如何正确使用默认值?
并且,如果我被迫将默认设置也存储在我的应用程序中,那么应用程序将如何知道何时使用它们,即用户是否更新了设置?
答案 0 :(得分:1)
注册默认值是正确的方法。尽快执行
let defaultValues = ["preference_show_score": true]
UserDefaults.standard.register(defaults: defaultValues)
无论何时启动应用程序,都必须执行代码。在用户更改默认值之前,将一直考虑该默认值。