2013-05-20 10 views
8

Kiedy użytkownik loguje się do mojego wniosku, pobrać tokena z mojego serwera JSON i przechowywać go w NSUserDefaults, jako takich:NSUserDefaults nie usunie obiekt za kluczowy

[[NSUserDefaults standardUserDefaults] setValue:token forKey:TOKEN]; 

Gdy użytkownik loguje się w kolejnej strony, to wywołać tę metodę i powrót do ekranu logowania:

[[NSUserDefaults standardUserDefaults] setObject:@"" forKey:TOKEN]; 

(i wcześniej, że nazwie [[NSUserDefaults standardUserDefaults] removeObjectForKey: Token];)

to doe Nieważne, jak próbuję usunąć domyślne ustawienia tego użytkownika, zawsze, gdy ładuję swoją aplikację, zawsze pokazuje mi pełny token, a nie pusty ciąg znaków lub wartość pustą.

Czytanie w kółko, najwyraźniej ma coś wspólnego z cyklami odczytu z czytania? Ale nawet jeśli zostawię to na jakiś czas, klucz nadal pozostaje. Czy to jest problem z symulatorem?

Jakąkolwiek przyczynę, jak to obejść?

+0

Czy możesz dokładniej opisać sposób wczytywania aplikacji? Próbowałem zarejestrować wartość przed i po removeObjectForKey i działa dobrze: '[[NSUserDefaults standardUserDefaults] setValue: @" test "forKey: @" token "]; NSLog (@ "% @", [[NSUserDefaults standardUserDefaults] objectForKey: @ "token"]); [[NSUserDefaults standardUserDefaults] removeObjectForKey: @ "token"]; NSLog (@ "% @", [[NSUserDefaults standardUserDefaults] objectForKey: @ "token"]); ' –

+1

Kiedy tak się logowałem, bezpośrednio przed, a potem zaraz po nim, przechodzi z istniejącego, do tego, że został usunięty. Jeśli jednak uzyskam dostęp do tych danych po zamknięciu aplikacji i ponownym jej załadowaniu, ciąg znaków pojawi się ponownie! (i po pewnym czasie usuwa go, a teraz nie zapisze go ponownie) – Rambatino

+0

Ładuje się tylko do kontrolera widoku, więc nie bardzo rozumiem, gdzie leży problem ... – Rambatino

Odpowiedz

16

Jest to problem z symulowaniem najpierw buforowania pamięci. Dzieje się tak tylko w xcode i nie powinno się zdarzyć na urządzeniu.

+0

To było symulator w moim przypadku, który był przyczyną problemu. – Tander

+0

AS w moim ..... – Rambatino

+6

Dopóki faktycznie nie piszesz testów jednostkowych, a tych nie można uruchomić na urządzeniu. Jak mamy przypuszczać, że testy faktycznie się powiodły? – Mazyod

7

Czy nazywasz

[[NSUserDefaults standardUserDefaults] synchronize]; 

po klucz został usunięty? Może nie utrzymujesz zmian w bazie danych.

+0

Chociaż to już nie jest problem, taka była metoda. Naprawdę powinienem częściej czytać dokumentację.Dzięki za to, wykorzystam to w przyszłości. Uczyniłem twoją poprawną odpowiedź – Rambatino