Please check the question
The code [[NSUserDefaults standardUserDefaults] stringForKey:@"key"] returns nil until data is saved to UserDefaults or user selects option manually in settings.
I suggest saving default values as selected when app launches:
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)
}