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?
Odpowiedz
Należy zastosować metodę NSUserDefaults
registerDefaults
. 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ść.
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
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ść. –
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
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
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. –
Zgadzam się. Nie wiedziałem o registerDefaults, kiedy napisałem tę odpowiedź, ale używam jej teraz. –
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];
}
-(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;
}
Sprawdź to: http://jayprakashdubey.blogspot.in/2014/07/nsuserdefault -usage.html –