2012-12-20 9 views
6

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

16

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

Tak. +1 dla ciebie, ja też, mam w tym czasie około 50 powtórzeń dla tej samej odpowiedzi. Zbyt leniwy, by znaleźć dupę. –

+0

@ 0x7fffffff circa (w przybliżeniu) 50 –

+0

@ 0x7fffffff (tak bardzo chce się programistów i tak niewiele wysiłku ... :() –

Powiązane problemy