2011-07-26 11 views
5

Podczas testowania mojej aplikacji na symulatorze, lubię możliwość edycji, a nawet kosza pliku plist aplikacji (który zawiera NSUserDefaults) z folderu iPhone Simulator. Jest to przydatne przy testowaniu (np. Twoja aplikacja przechowuje tam słownik, ale zmieniasz model/klucze, których używasz dla tych danych, i dlatego musisz usunąć przechowywany słownik).Pobierz plik plist NSUserDefaults z urządzenia

Czy można uzyskać dostęp do tego pliku na urządzeniu (dla własnej aplikacji), bez jailbreak?

góry dzięki

+0

Czy można nie tylko usunąć aplikację z symulatora/urządzenia, a następnie ponownie ją zbudować i uruchomić? – Luke

+0

To szybki sposób, aby to zrobić, ale usunie również wszystkie inne pliki stanu aplikacji, folder dokumenty/tymczasowe itp. – tsakoyan

+0

Zaczekaj, usuwając aplikację z urządzenia również usuń plist? –

Odpowiedz

5

plik jest w Library/Preferences. Plik jest binarny plist z nazwą <iOS application target identifier>.plist (poszukaj pola Identyfikator w ustawieniach aplikacji docelowych) lub wyświetlić zawartość katalogu:

NSString *path = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) firstObject]; 
NSArray *dirContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil]; 

Można również załadować czyste domyślne z #ifdef makro na podstawie jakiejś zmiennej env :

#ifdef TESTING 
    // use the code provided by tsakoyan below 
#endif 
+0

W dokumentach jest napisane resetStandardUserDefaults "Synchronizuje wszelkie zmiany dokonane w obiekcie domyślnym użytkownika współdzielonego i zwalnia je z pamięci" – tsakoyan

+0

Dzięki, pomyślałem, że zresetuje ustawienia domyślne z powodu tego, co przeczytałem w sekcji Dyskusja dla tej metody * "tworzy nowy współdzielony użytkownik domyślnie obiekt ze standardową listą wyszukiwania "*, ale ma to na celu cofnięcie' registerDefaults', jeśli dobrze zrozumiałem. I + 1'ed twoją odpowiedź poniżej. – Jano

3

Jeśli zależy Ci tylko na wartościach NSUserDefaults powinno to trash/przywracania do globalnych domyślnych wszystkie dane niestandardowe

NSDictionary *userDefDic = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]; 
NSArray *keys = [NSArray arrayWithArray:[userDefDic allKeys]]; 
for (NSString *key in keys) { 
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:key]; 
} 
[[NSUserDefaults standardUserDefaults] synchronize];