/ / Dane w NSUserDefaults nie występują w każdym ponownym uruchomieniu aplikacji - ios, xcode, nsuserdefaults

Dane w NSUserDefaults zniknęły przy każdym ponownym uruchomieniu aplikacji - ios, xcode, nsuserdefaults

Widzę to dziwne zachowanie, które wydaje siębyć specyficzne dla mojego konkretnego urządzenia lub mojego środowiska budowlanego (mój kolega nie ma tego problemu podczas budowania tego samego kodu). Za każdym razem, gdy uruchamiam aplikację z danych Xcode NSUserDefaults przepadło. To samo dzieje się, gdy zabijam aplikację i restartuję ją.

Próbowałem zrestartować Xcode, mój laptop, urządzenie, oczyścić projekt i uzyskać dane - nic nie pomogło. Dzwonię synchronize() po zaktualizowaniu danych, więc należy je zachować. Ale tak nie jest. I nie widzę żadnych błędów w konsoli.

Jaka jest przyczyna tego problemu? Co mam zrobić, aby to naprawić? Czy jest to spowodowane jakimś wymyślnym ukrytym ustawieniem projektu?

Chciałbym również wiedzieć, czy dane są resetowane po ponownym uruchomieniu lub nie są zapisywane, gdy synchronize() jest nazywany. Czy mogę sprawdzić zawartość pliku, w którym NSUserDefaults są zapisane?


AKTUALIZACJA: Ciekawy szczegół. Po zabiciu aplikacji w symulatorze nie mogę jej ponownie uruchomić z Xcode (pobieranieThe operation couldn’t be completed. (LaunchServicesError error 0.)„). Muszę użyć iOS Simulator -> Reset Content and Settings aby móc ponownie uruchomić aplikację w emulatorze.


UPDATE 2: Próbowałem znaleźć plik, w którym iPhone Simulator przechowuje NSSharedPreferences jak sugerowano tutaj, ale go tam nie ma.

Odpowiedzi:

1 dla odpowiedzi № 1

Nie ma wyszukanych ustawień, które uniemożliwiałyby zachowanie ciągłości w NSUserDefaults, jednak jest kilka czynników, które należy wziąć pod uwagę:

  1. Przed dodaniem i pobraniem ich z NSUserDefaults upewnij się, że archiwizujesz i archiwizujesz obiekty inne niż proste wartości
  2. Upewnij się, że rozumiesz zakres utrwalonych danych (App, Device, ...), spójrz na odpowiednie metody wewnątrz klasy NSUserDefault.
  3. Upewnij się, że Twoje biblioteki innych firm nie resetują sięNSUserDefault, to był problem w moim przypadku. Debuguj przy uruchomieniu aplikacji i spróbuj dowiedzieć się, czy masz wartość na początku i kiedy „tracisz”. To pomogło w moim przypadku.

0 dla odpowiedzi nr 2

Spróbuj zrobić nową aplikację „Pojedynczy widok” i dodaj kod, którego używasz do zapisania danych NSUserDefault, w didFinishLaunchingWithOptions. Sprawdź, czy problem nadal występuje.