to może brzmieć naprawdę NOOB! Chcę sprawdzić, czy użytkownik po raz drugi wchodzi do mojej aplikacji, aby zachować licznik uruchomień, którego używam NSUserDefaults
. I wprowadziły następujący kod w moim rootViewController
„s viewDidLoad
metody:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSLog(@"hello %ld", (long)[userDefaults integerForKey:@"runCount"]);
if ([userDefaults integerForKey:@"runCount"] != 1) {
//not the 2nd run
[userDefaults setInteger:1 forKey:@"runCount"];
NSLog(@"not 2nd run");
} else {
//second run or more
NSLog(@"2nd run");
}
[userDefaults synchronize];
wszystko działa dobrze, ale problem polega na tym, że gdy odinstaluję (skasuję i przeinstaluję) aplikację zgodnie z tu i tu dane powinny zostać wyczyszczone, ale tak nie jest i po ponownym zainstalowaniu aplikacji nadal pojawiają się poprzednie dane. Używam mojej aplikacji na symulatorze iOS przy użyciu xCode6-beta i przeznaczam aplikację na iOS 8
ios
ios-simulator
nsuserdefaults
ios8
xcode6
Reza Shayestehpour
źródło
źródło
NSMutableArray
, który zapisałem dla jakiegoś klucza , został zapisany jako a,NSArray
a zmiana go spowodowała awarię aplikacji. .. Zalecam zapisanie a,NSArray
a gdy zechcesz użyć go później, przerzucając go naNSMutableArray
używanie[NSMutableArray arrayWithArray:array];
. Mam nadzieję że to pomogło.Odpowiedzi:
Myślę, że jest to spowodowane błędem w symulatorze iOS8 Beta.
Oczekiwane zachowanie polega na tym, że po usunięciu aplikacji wartości NSUserDefaults dla tej aplikacji są również usuwane.
Szybkim i denerwującym rozwiązaniem na razie jest kliknięcie, Symulator iOS -> Resetuj zawartość i ustawienia.
Xcode 9.2 z Symulatorem 10 nadal przedstawia ten problem. Opcja menu to teraz Sprzęt .. Usuń całą zawartość i ustawienia
Przy okazji przesłałem raport o błędzie
źródło
Ponieważ Resetuj zawartość i ustawienia jest opcją nuklearną, możesz rozważyć dwie inne opcje, dopóki błąd w symulatorze iOS 8 / Xcode 6 GM nie zostanie rozwiązany:
Możesz ręcznie usunąć plik plist, w którym
NSUserDefaults
są przechowywane. Obecnie znajduje się~/Library/Developer/CoreSimulator/Devices/*some_device_id*/Library/Preferences/com.yourcompany.yourapp.plist
on pod adresem Znalezienie odpowiedniego symulatora do pracy z nazwami katalogów UUID jest trochę uciążliwe. EDYCJA : 2014-10-28 20-34-52 Prawidłowa ścieżka:~/Library/Developer/CoreSimulator/Devices/*some_device_id*/data/Library/Preferences/com.yourcompany.yourapp.plist
Możesz wykonać "operację" na tej plistie (być może używając fazy budowania skryptu uruchamiania) używając np. Plistbuddy
/usr/libexec/plistbuddy -c "Set :BSDidMoveSqliteDb 0" path_to_plist
źródło
Dla każdego, kto ma ten sam problem.
Jeśli masz więcej niż 1 aplikację w tej samej grupie i wszystkie używają grup aplikacji (włączone w ramach możliwości), będziesz musiał usunąć wszystkie aplikacje z urządzenia, aby ustawienia domyślne użytkownika zostały wyczyszczone.
Ponieważ wartości domyślne użytkownika są udostępniane, nawet jeśli jedna z aplikacji znajduje się na urządzeniu, nie zostanie ona usunięta, ponieważ ta aplikacja będzie używać ustawień userdefault.
źródło
Kod powinien działać poprawnie na urządzeniu. Może jakieś błędy w symulatorze.
Spróbuj zresetować zawartość i ustawienia symulatora.
źródło
jest to błąd i możesz usunąć NSUserDefaults za pomocą następującego kodu
źródło
Chociaż nadal jest to błąd, inną opcją może być usunięcie określonych kluczy w NSUserDefaults. W większości przypadków podczas testowania / programowania zależy nam tylko na kilku kluczach, a nie o wszystkim w NSUserDefaults. Jeśli zależy Ci tylko na kilku klawiszach to proponuję dodać
removeObjectForKey
:Dodanie
removeObjectForKey
symuluje pierwsze uruchomienie aplikacji, a wykomentowanie spowoduje symulację wszystkich kolejnych uruchomień aplikacji.źródło
W moim przypadku znalazłem * .plist w następującym katalogu:
[1] / Users / SOME-USERNAME / Library / Developer / CoreSimulator / Devices / SOME-DEVICE-ID /data/Library/Preferences/SP.UserDefaultsTest.plist
Problem: Usunięcie aplikacji w xCode 6 (symulator iOS 8), ale plik pozostaje na dysku, jak wspomniano powyżej.
Rozwiązanie: ręczne usunięcie zlokalizowanego pliku ze ścieżki [1] i usunięcie NSUserDefaults.
Tak więc irytujący sposób resetowania symulatora nie jest już potrzebny.
źródło