Szukam szybszego sposobu na zapisanie preferencji użytkownika niż NSUserDefaults. Odkryłem, że jeśli aplikacja zostanie zabita w ciągu około 10 sekund od napisania do NSUserDefaults, nie zostanie ona zapisana na stałe. Używam ustawień domyślnych, aby zapisać ścieżki do niestandardowych dźwięków dzwonka, ścieżek do niestandardowych obrazów, współrzędnych na mapie i po prostu preferencji zdefiniowanych przez użytkownika. Czy używanie danych podstawowych jest lepszą opcją? SQLite? Co jest akceptowane jako najszybszy i najlżejszy?NSUserDefaults tracą nowo zapisane dane, jeśli App zabity w ciągu 10 sekund
Odpowiedz
Musisz koniecznie zadzwonić do synchronizacji, aby natychmiast zapisać dane.
[[NSUserDefaults standardUserDefaults] synchronize];
Od Apple class reference:
Ponieważ metoda ta jest automatycznie wywoływana w regularnych odstępach czasu, stosowanie tej metody tylko wtedy, gdy nie można czekać do automatycznego synchronizacji (na przykład, jeśli aplikacja jest o aby wyjść) lub , jeśli chcesz zaktualizować domyślne ustawienia użytkownika na dysku, mimo że nie wprowadziłeś żadnych zmian.
I aby odpowiedzieć na twoje drugie pytanie, to naprawdę zależy od tego, ile danych chcesz przechowywać. NSUserDefaults jest przeznaczony do przechowywania bardzo małych ilości danych (dla preferencji), takich jak stan przełącznika itp. Możesz uciec od przechowywania ścieżek do obrazów i dzwonków tutaj, ale nie jest to dokładnie zalecane. Mam na myśli to, że możesz, ale prawdopodobnie nie powinieneś.
Core Data to znacznie lepsze podejście, jeśli planujesz przechowywać wiele z tych ścieżek, ponieważ jest bardzo skalowalna i działa bardzo dobrze. Tak więc ogólnie rzecz biorąc, jeśli potrzebujesz przechowywać wiele danych, dane podstawowe użytkownika lub jako alternatywną alternatywę, przechowuj ścieżki w pliku plist w katalogu dokumentów.
- 1. Zapisane dane utracone po aplikacji zabicia przy użyciu NSUserDefaults
- 2. FFMPEG: ostatnie 10 sekund
- 3. Przekierowanie 10 sekund Odliczanie
- 4. jak dołączyć zapisane dane do pliku?
- 5. CLLocationManager.requestLocation() trwa około 10 sekund
- 6. Dane obrazu MySQL BLOB stopniowo tracą?
- 7. SELECT/GROUP BY - segmenty czasu (10 sekund, 30 sekund, itp.)
- 8. Pierwsze 10 znaków ciągu?
- 9. jak zrobić animację CSS co 10 sekund
- 10. „Backspace” w ciągu ostatniego znaku zapisane do pliku
- 11. Gdzie NSUserDefaults przechowuje dane w systemie Mac OS X?
- 12. Jak dodać 10 sekund w current_timestamp SQL (Oracle)
- 13. Korzystanie NSUserDefaults z Xcode iOS 8 i 10
- 14. Wywołanie Oracle, aby uzyskać dane z tabeli wstawione w ciągu ostatnich 10 minut
- 15. Swift NSUserDefaults setString: forKey :?
- 16. IPhone SendDelegateMessage udało się powrócić po odczekaniu 10 sekund
- 17. Jak anulować AsyncTask Androida po określonym czasie? (Np. 10 sekund)
- 18. APP vs nazwa aplikacji w ciągu połączenia
- 19. Wykonaj kod co 10 sekund, ale zacznij także od 0 sekund
- 20. Jak spać 10 sekund przed uruchomieniem polecenia linux?
- 21. Naciśnij enter lub poczekaj 10 sekund, aby kontynuować.
- 22. Elementy RecyclerView tracą ostrość
- 23. Rdzeń Dane zawarte w App Store Bundle
- 24. Co oznacza "zabity"?
- 25. Formatowanie ciągu znaków na 10 znaków
- 26. Wykrywanie zmian w NSUserDefaults
- 27. Jak zapisać UIColor z NSUserDefaults?
- 28. Zastępowanie języków AppleLanguages w NSUserDefaults
- 29. rejestracja ponad 10 aplikacji w Google App Engine
- 30. Proces zabity przez SIGKILLa
Tak. +1 dla ciebie, ja też, mam w tym czasie około 50 powtórzeń dla tej samej odpowiedzi. Zbyt leniwy, by znaleźć dupę. –
@ 0x7fffffff circa (w przybliżeniu) 50 –
@ 0x7fffffff (tak bardzo chce się programistów i tak niewiele wysiłku ... :() –