Как установить начальные значения для ключей NSUserDefault? - PullRequest
42 голосов
/ 12 декабря 2011

Я хочу установить некоторые начальные значения для моих ключей NSUserDefault, чтобы при первом запуске приложения были установлены разумные начальные настройки.Я думал, что наткнулся на простой способ сделать это в пакете приложений .plist, но теперь я не могу его найти.Есть идеи?

Ответы [ 4 ]

70 голосов
/ 12 декабря 2011

Вы должны использовать registerDefaults метод NSUserDefaults.Подготовьте файл plist в вашем пакете, который содержит настройки по умолчанию, а затем используйте этот plist для регистрации значений по умолчанию.

NSString *defaultPrefsFile = [[NSBundle mainBundle] pathForResource:@"defaultPrefs" ofType:@"plist"];
NSDictionary *defaultPreferences = [NSDictionary dictionaryWithContentsOfFile:defaultPrefsFile];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultPreferences];

Этот код необходимо выполнять при каждом запуске приложения.Эти значения будут добавлены в отдельный домен в пользовательской иерархии по умолчанию.Всякий раз, когда пользовательские значения по умолчанию вашего приложения не предоставляют значение для определенного ключа, NSUserDefaults возвращается к этому домену и получает значение оттуда.

5 голосов
/ 08 мая 2014

Если у вас много значений по умолчанию, используйте ответ Олы , в противном случае это хорошо для нескольких параметров

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

if (![defaults boolForKey:USERDEFAULT_IS_INITIALIZED]) { 
    [defaults setBool:YES forKey:USERDEFAULT_IS_INITIALIZED];

    // Set initial values 
    ...

    [defaults synchronize];
}
0 голосов
/ 29 августа 2014
-(void) loadDef
{
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    _removeAd=[userDefaults boolForKey:SAVE_AD_STATUS];

    NSString* strDefSetting=[userDefaults stringForKey:SAVE_STATUS_ADSETTING];
    if(strDefSetting==nil
       ||[strDefSetting isEqualToString:@""]
       )
    {
        strDefSetting=@"0.5";
    }

    _floatAdmob=strDefSetting.floatValue;//0.5;
}
0 голосов
/ 12 декабря 2011
if ([[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"initialValuesHaveBeenWritten"])
{
    [[NSUserDefaults standardUserDefaults] setValue:obj1 forKey:key1];
    [[NSUserDefaults standardUserDefaults] setValue:obj2 forKey:key2];


    [[NSUserDefaults standardUserDefaults] setValue:obj1 forKey:@"initialValuesHaveBeenWritten"];

    [[NSUserDefaults standardUserDefaults] synchronize];
}

Примечание: не проверено, сделано из памяти

...