пакет параметров - поведение по умолчанию? - PullRequest
5 голосов
/ 12 апреля 2011

Я создал набор настроек с одним значением предпочтения, текстовое поле со значением по умолчанию.

Когда мое приложение запускается и я получаю значение, оно равно null.Нужно ли вручную кодировать значение для использования, прежде чем пользователь предоставит значение?

Также, если пользователь перейдет на экран настроек и войдет в текстовое поле, оставьте его без каких-либо изменений, значение не будетустановить ... пользователь должен фактически изменить значение для его сохранения, это правильно?

Ответы [ 3 ]

4 голосов
/ 08 июня 2011

Нет, не делай этого.

Для этого есть функция:

id userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults registerDefaults: defaultSettings];

Вы можете создать параметр, выполнив итерацию всех вложенных клавиш PreferenceSpecifiers в файле настроек plist.

Примерно так:

- (NSDictionary *)readDefaultSettingsFromPlist: (NSString *)inPath;
{
    id mutable = [NSMutableDictionary dictionary];
    id settings = [NSDictionary dictionaryWithContentsOfFile: inPath];
    id specifiers = [settings objectForKey: @"PreferenceSpecifiers"];
    for (id prefItem in specifiers) {
        id key = [prefItem objectForKey: @"Key"];
        id value = [prefItem objectForKey: @"DefaultValue"];
        if ( key && value ) {
            [mutable setObject: value
                        forKey: key];
        }
    }
    return [NSDictionary dictionaryWithDictionary: mutable];
}
1 голос
/ 16 мая 2011

Кажется, значение по умолчанию отображается в приложении «Настройки», но не сохраняется автоматически в NSUserDefaults standardUserDefaults. Поэтому, если вы найдете значение nil, вам следует явно установить значение по умолчанию.

Примерно так:

+ (NSString *)userDefaultStringForKey:(NSString *)key defaultValue:(NSString *)def {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *val = [defaults stringForKey:key];
    if (val == nil && def != nil) {
        val = def;
        [defaults setObject:val forKey:key];
    }
    return val;
}
1 голос
/ 12 апреля 2011

Вы можете проверить в своем приложении, если вы получаете нулевой ключ, тогда вы можете использовать свое собственное значение по умолчанию.

...