Пожалуйста, проверьте вопрос
Проблема в том, что выбранное значение составляет nil
до того, как пользователь взаимодействует с настройками приложения.
Решением для этого будет регистрация значений по умолчанию от Root.plist до UserDefaults
при запуске приложения.
Я обновил код исходного вопроса до Swift 5:
static func registerSettingsDefaults()
{
// Get Settings bundle path
guard let settingsBundle = Bundle.main.path(forResource: "Settings", ofType: "bundle") else {
assertionFailure("Could not find Settings bundle")
return
}
// Get settings plist
let settings = NSDictionary(contentsOfFile: settingsBundle + "/Root.plist")
// Get preferences dictionary
guard let preferences = settings?.object(forKey: "PreferenceSpecifiers") as? [[String: Any]] else {
assertionFailure("Could not find preferences")
return
}
// Filter out default values from Settings
var defaultsToRegister: [String: Any] = [:]
preferences.forEach { dictionary in
if let key = dictionary["Key"] as? String {
defaultsToRegister[key] = dictionary["DefaultValue"] as? String
}
}
UserDefaults.standard.register(defaults: defaultsToRegister)
}
И я называю это в didFinishLaunchingWithOptions
:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
{
// Register Settings defaults
registerSettingsDefaults()