0

在我的 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")

有两个观察到的结果:

  1. 如果用户之前更改了设置,则将正确的设置分配给showScore
  2. 如果用户没有触摸设置,则检索到的值false即使默认值应该是true

因此,实际设置只能在用户更改后才能读取,这使得默认值变得多余。

关于这个主题有很多 SO 帖子,但是,在阅读它们之后,我更加困惑。

有人建议复制应用程序本身的设置,但在这种情况下,设置应用程序提供了什么值?而且,显然,检索设置并非完全不可能——只是在用户更改它们之前。

其他一些答案说,问题与UserDefaults在使用它们之前没有注册一次默认值有关。在这里,我不确定应该如何以及在哪里完成。AppDelegate我已经在读取值本身的方法和方法中使用以下语句进行了尝试。事实上,根本不使用它似乎并没有什么不同。

UserDefaults.standard.register(defaults: [String:AnyObject]())

因此,根据我找到的所有信息,我想知道是否甚至可以使用默认值,如果可以,它是如何正确完成的?

而且,假设我也被迫在我的应用程序中存储默认值,应用程序如何知道何时使用它们,即用户是否更新了设置?

4

1 回答 1

2

注册默认值是正确的方法。尽快执行

let defaultValues = ["preference_show_score": true]
UserDefaults.standard.register(defaults: defaultValues)

每当应用程序启动时,都必须执行代码。在用户更改它之前,会一直考虑默认值。

于 2019-05-03T14:15:54.503 回答