如何从PSMultiValueSpecifier获取选定的值/键?

时间:2011-04-08 18:06:39

标签: objective-c xcode settings.bundle

在我的 Settings.bundle 中,我定义了一个PSMultiValueSpecifier。现在我想阅读选中的值。

这就是我从Settings.bundle文字字段

中读取简单文字的方法
[[NSUserDefaults standardUserDefaults] stringForKey:@"name_preference"];

知道如何读取所选的多值吗?

3 个答案:

答案 0 :(得分:3)

使用您在Settings.plist中为此字段指定的Key,您可以使用以下内容获取所选值:

// Assumption: myKey is a string that's equal to the Key in Settings.plist
[[NSUserDefaults standardUserDefaults] objectForKey:myKey];

无法通过用户默认值获取所选字段的标题。您必须直接阅读Settings.plist或将标题及其随附的值存储在应用包中的第二个plist中,以便于访问。

答案 1 :(得分:3)

用它来获取你的价值:

NSString* value = [[NSUserDefaults standardUserDefaults] stringForKey:@"key"] 

Key是要获取其值的设置的名称。如果需要,您可以获取字符串的float或int值。

答案 2 :(得分:0)

请检查question

代码[[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)
}