В моем приложении для 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]())
Итак, со всей информацией, которую я нашел, я задаюсь вопросом, возможно ли вообще использовать значения по умолчанию и, если да, как это делается правильно?
И, скажем, я вынужден хранить значения по умолчанию и в моем приложении, как приложение узнает, когда их использовать, т. Е. Если пользователь обновил настройки?