Как получить выбранное значение / ключ из PSMultiValueSpecifier?

в моем Settings.bundle я определил PSMultiValueSpecifier. Теперь я хочу прочитать значение selected.

Вот как я читаю простой текст из Settings.bundle текстового поля

[[NSUserDefaults standardUserDefaults] stringForKey:@"name_preference"];

Есть идеи, как прочитать выбранное мульти-значение?


person Upvote    schedule 08.04.2011    source источник
comment
Вы имеете в виду, что хотите получить массив или dic?   -  person Ahmad Kayyali    schedule 08.04.2011
comment
Теперь я хочу узнать, как получить текущий заголовок и ключевое значение выбранного поля.   -  person Upvote    schedule 09.04.2011


Ответы (3)


Используя Key, который вы указали для этого поля в своем Settings.plist, вы можете получить выбранное значение с помощью:

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

Невозможно получить название выбранного поля с помощью пользовательских значений по умолчанию. Вам нужно будет прочитать файл Settings.plist напрямую или сохранить заголовки и соответствующие им значения во втором списке вашего пакета приложений для облегчения доступа.

person Ole Begemann    schedule 11.04.2011

Используйте это, чтобы получить свою ценность:

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

Ключ - это имя параметра, значение которого вы хотите получить. Затем вы можете получить значение строки с плавающей запятой или int, если вам нужно.

person quaertym    schedule 11.04.2011
comment
Именно это он и делал в исходном вопросе - person sergey.syrotynin; 10.05.2019

Пожалуйста, проверьте вопрос

Код [[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)
}
person sergey.syrotynin    schedule 10.05.2019