2011-01-31 21 views
5

Mam następujący kod w moim inicjalizacji (po raz pierwszy) z mojej aplikacji:nie można ustawić NSUserDefaults pole

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *[email protected]"1"; 
[defaults setObject:uid forKey:@"init_val"]; 
[defaults synchronize]; 

Znacznie później w kodzie (w reakcji na naciśnięcie przycisku) sprawdzić wartość używając:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *initVal=[defaults objectForKey:@"init_val"]; 

initVal jest zawsze zerowe. Sprawdziłem i init_val jest skonfigurowany dokładnie tak samo w moim pakiecie ustawień, jak inne pole, które mogę ustawić i czytać bez problemu (oba są skonfigurowane z jednym polem o nazwie "Key"

+0

Hm, dziwne. Czy to samo się dzieje, jeśli użyjesz -stringForKey: zamiast -objectForKey :? Czy też -synchronizuje się return TAK? – macserv

+0

Najpierw wypróbowałem stringForKey. I synchronizuj zwroty TAK – mlewis54

+0

Skorzystaj z mojej odpowiedzi. Jestem pewien, że dostaniesz swoje rozwiązanie w mojej odpowiedzi. Zostaw komentarz, jeśli napotkasz jakiekolwiek problemy z moją odpowiedzią. –

Odpowiedz

5

@ mlewis54:

Można spróbować tego kodu. Jestem pewien, że to zadziała dla Ciebie.

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *[email protected]"1"; 
[defaults setObject:uid forKey:@"init_val"]; 
[defaults synchronize]; 

Do pobierania danych należy użyć następującego kodu:

NSString *initVal=[[NSUserDefaults standardUserDefaults] valueForKey:@"init_val"]; 

LUB

NSString *initVal=[[NSUserDefaults standardUserDefaults] objectForKey:@"init_val"]; 

EDIT:

Jeśli nadal nie daje nil, następnie można użyć następującego kodu:

NSString *initVal=[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] valueForKey:@"init_val"]]; 

LUB

NSString *initVal=[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"init_val"]]; 

nadzieję, że to pomaga.

+0

Dzięki za odpowiedź. W końcu sprawiłem, że działało w ten sposób. Pod koniec dnia okazało się to dyskusyjne. Przeniosłem funkcję ustawień do aplikacji i nie używam już pakietu ustawień ani ustawień domyślnych. Doceniam wkład każdego. – mlewis54

+0

@ mlewis54: Witaj. Cieszę się, że ci pomogło. :-) –

0

Nie ma nic złego w Twój kod, próbowałem skopiować go w moim projekcie i to działało dobrze, więc błąd może być prawdopodobnie podczas sprawdzania initVal ...

jaki jest kod użyć, aby zobaczyć czy initVal jest zerowa? i jesteś pewien, że kiedy/gdzie sprawdzasz initVal, ten var/oblect jest nadal widoczny?

spróbuj wstawić to natychmiast po kodzie odczytu:

NSLog(@"____text read in pref: %@", initVal); 

to pisze to w moim oknie konsoli ->_ _text czytać w pref: 1

oczywiście jest to NSString, mam nadzieję, że należy pamiętać, że nie jest to int lub NSNumber kiedy go sprawdzić ...

luca

+0

Sprawdzam initVal używając if (! InitVal) {<<< następnie nie inited >>>}. Będę wysyłać wartość debuggera, kiedy wrócę do biurka. Uważam, że jest to 0x0. Nie ma problemu ze skalowaniem, ponieważ wykonuję instrukcje w wierszu (powyższe 2, gdzie otrzymuję wartości domyślne, a następnie instrukcję if). – mlewis54

+0

następnie zapewniam, że kod jest poprawny, próbowałem to: NSString * initVal = [defaults objectForKey: @ "init_val"]; jeśli (! InitVal) { \t NSLog (@ "__ 1__tekst odczytany w pref:% @", initVal); } else { \t NSLog (@ "__ 2__tekst odczytany w pref:% @", initVal); // to jest wykonywane } w oknie konsoli: __2__text czytać w pref: 1 następnie bug powinien być gdzie indziej ... starają się „oczyścić wszystkie cele” w menu „budować” w Xcode robi ... zdarza się to w urządzeniu lub na symulatorze? – meronix

+0

Obie. Clean nie pomogło. – mlewis54

0

Czy jesteś pewien, że właściwie zainicjowana NSUserDefaults? Kiedy zainicjować moim delegata aplikacji, zawsze utworzyć domyślne domyślnego użytkownika poprzez stworzenie słownika wartości domyślnych następnie:

[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults]; 

Gdzie appDefaults jest słownik. Wtedy powinieneś być w stanie uzyskać do nich prawidłowy dostęp.

+0

Gdzie indziej w delegacie aplikacji Ustawiam słownik z parami domyślnymi (wartość/klucz). – mlewis54

1

Trzeba korzystać z linii

NSString *initVal = [defaults stringForKey:@"init_val"]; 

- ponieważ jest to String trzeba użyć . W podobny sposób można użyć wartości boolForKey, aby uzyskać wartość logiczną.

0

Możliwe, że inicjalizacja się nie dzieje. Umieść tam dziennik NSLog, aby sprawdzić, czy jest wykonany.

0

To działa dobrze dla mnie z tym samym kodem:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *[email protected]"1"; 
[defaults setObject:uid forKey:@"init_val"]; 
[defaults synchronize]; 

NSUserDefaults *defaultss = [NSUserDefaults standardUserDefaults]; 
NSString *initVal=[defaultss objectForKey:@"init_val"]; 
NSLog(@"Value of initVal: %@",initVal); 

O/P na konsoli: Wartość initVal: 1

Więc spróbuj zrobić to z tego samego kodu z nadrukiem na konsoli.

1

Decelare to na imprezie na kliknięcie przycisku ...

NSUserDefaults *savedData = [NSUserDefaults standardUserDefaults]; 
[savedData setObject:userEmailTextField.text forKey:@"userid"]; 

i obciążenia załadować dane i sprawdzić wartość wprowadzoną już pokazuje, czy nie ...

userEmailTextField.text =[[NSUserDefaults standardUserDefaults]objectForKey:@"userid"]; 
Powiązane problemy