2011-12-12 16 views
40

Chcę ustawić niektóre wartości początkowe dla moich kluczy NSUserDefault, tak aby pierwsze uruchomienie aplikacji miało pewne rozsądne ustawienia początkowe. Pomyślałem, że mam prosty sposób na zrobienie tego w pakiecie aplikacji .plist, ale teraz nie mogę go znaleźć. Jakieś pomysły?Jak ustawić wartości początkowe dla kluczy NSUserDefault?

+0

Sprawdź to: http://jayprakashdubey.blogspot.in/2014/07/nsuserdefault -usage.html –

Odpowiedz

68

Należy zastosować metodę NSUserDefaultsregisterDefaults. Przygotuj plik plist w pakiecie, który zawiera domyślne preferencje, a następnie użyj tego pliku plist do zarejestrowania wartości domyślnych.

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

Musisz wykonać ten kod przy każdym uruchomieniu aplikacji. Doda te wartości do oddzielnej domeny w hierarchii domyślnych użytkowników. Ilekroć domyślne ustawienia użytkownika Twojej aplikacji nie zawierają wartości dla określonego klucza, NSUserDefaults powróci do tej domeny i pobierze z niej wartość.

+0

Wygląda na to, że rejestruje wartości domyślne w ulotnej lokalizacji pamięci. Nie chcę, aby w ogóle często powracał do wartości domyślnych. Dotyczy to głównie pierwszego uruchomienia. Czy wartości ustawione przez użytkownika zostaną zachowane, czy też czasami będą nadpisywane przez to? – Suz

+4

Co rozumiesz przez "ulotną lokalizację pamięci"? Musisz wykonać ten kod przy każdym uruchomieniu aplikacji. Doda te wartości do oddzielnej domeny w hierarchii domyślnych użytkowników. Ilekroć domyślne ustawienia użytkownika Twojej aplikacji nie zawierają wartości dla określonego klucza, 'NSUserDefaults' powróci do tej domeny i pobierze z niej wartość. –

+0

Podręcznik programowania ustawień domyślnych użytkownika wymienia nazwę NSRegistrationDomain jako stan "lotny", a nie "trwały". Tak więc same ustawienia domyślne użytkownika są trwałe, a wartości domyślne są niestabilne i muszą być ponownie ładowane przy każdym uruchomieniu aplikacji. Po prostu wydaje mi się dziwne, że wartość "cofnij" jest mniej trwała niż ustawienie użytkownika. – Suz

0
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]; 
} 

NB: Nie testowane, wykonane z pamięci

+1

To naprawdę nie jest właściwy sposób na to. Działa, ale nie sugeruje tego Apple. Użyj -registerDefaults jak opisano w odpowiedzi @ole lub dodaj je bezpośrednio do domeny NSRegistrationDomain. –

+0

Zgadzam się. Nie wiedziałem o registerDefaults, kiedy napisałem tę odpowiedź, ale używam jej teraz. –

5

Jeśli masz wiele wartości domyślne, niech używać ola's answer, inaczej to jest dobre na kilka params

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

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

    // Set initial values 
    ... 

    [defaults synchronize]; 
} 
-1
-(void) loadDef 
{ 
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 

    _removeAd=[userDefaults boolForKey:SAVE_AD_STATUS]; 

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

    _floatAdmob=strDefSetting.floatValue;//0.5; 
} 
Powiązane problemy