Невозможно прочитать значения по умолчанию из набора настроек, пока пользователь не изменит их - PullRequest
0 голосов
/ 03 мая 2019

В моем приложении для 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]())

Итак, со всей информацией, которую я нашел, я задаюсь вопросом, возможно ли вообще использовать значения по умолчанию и, если да, как это делается правильно?

И, скажем, я вынужден хранить значения по умолчанию и в моем приложении, как приложение узнает, когда их использовать, т. Е. Если пользователь обновил настройки?

1 Ответ

1 голос
/ 03 мая 2019

Регистрация значений по умолчанию является абсолютно правильным способом. Как можно скорее выполните

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

Код должен выполняться при каждом запуске приложения. Значение по умолчанию считается, пока пользователь не изменит его.

...