在我的Settings.bundle中,我定义了一个 PSMultiValueSpecifier。现在我想读取选定的值。
这就是我从Settings.bundle
文本字段中读取简单文本的方式
[[NSUserDefaults standardUserDefaults] stringForKey:@"name_preference"];
知道如何读取选定的多值吗?
在我的Settings.bundle中,我定义了一个 PSMultiValueSpecifier。现在我想读取选定的值。
这就是我从Settings.bundle
文本字段中读取简单文本的方式
[[NSUserDefaults standardUserDefaults] stringForKey:@"name_preference"];
知道如何读取选定的多值吗?
使用Key
您在 Settings.plist 中为此字段指定的值,您可以通过以下方式获得所选值:
// Assumption: myKey is a string that's equal to the Key in Settings.plist
[[NSUserDefaults standardUserDefaults] objectForKey:myKey];
无法通过用户默认值获取所选字段的标题。您必须直接阅读 Settings.plist 或将标题及其随附值存储在应用程序包中的第二个 plist 中,以便于访问。
使用它来获得您的价值:
NSString* value = [[NSUserDefaults standardUserDefaults] stringForKey:@"key"]
Key 是您要获取其值的设置的名称。然后,如果需要,您可以获取字符串的 float 或 int 值。
请检查问题
代码[[NSUserDefaults standardUserDefaults] stringForKey:@"key"]
返回nil
,直到数据被保存UserDefaults
或用户在设置中手动选择选项。
我建议在应用启动时保存默认值:
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)
}