2012-07-16 23 views
5

Używam NSUserDefaults w moim ustawieniu. Aplikacja działa dobrze, nawet jeśli włączyłem aplikację do kluczy w domu, ale jeśli zabiję aplikację, zapis danych w NSUserDefaults zostanie utracony. Oto mój kod. Używam synchronizacji. Pierwszy initialize:Zapisane dane utracone po aplikacji zabicia przy użyciu NSUserDefaults

if (![userDefaults integerForKey: 
      kORFootageAirPlayModeKey]) 
    { 
     [userDefaults setInteger:TRUE forKey:kORFootageAirPlayModeKey]; 
    } 
    [userDefaults synchronize]; 

odczytać wartość się w viewController:

airPlayMode = [[NSUserDefaults standardUserDefaults]integerForKey:kORFootageAirPlayModeKey]; 

Ustaw go w akcji:

- (IBAction)changeAirPlayStatus:(id)sender 
{ 

    if (sender) 
    { 
     airPlayMode = [sender tag]; 

     [[NSUserDefaults standardUserDefaults] setInteger:airPlayMode forKey:kORFootageAirPlayModeKey]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 
..... 

}

Odpowiedz

1

ja nie widzę powodem tego.

Sprawdziłeś w katalogu Symulatora, pod Biblioteką/Pamiętnikami znajduje się plik plist, który zapisuje twoje NSUserDefaults. Sprawdź, czy jest poprawnie napisany.

Proszę, nie używaj setInteger: TRUE. Jest to błędne na wielu poziomach. Zamiast tego użyj setBOOL: YES. Lub setInteger: 1.

+1

Po zmianie setInteger na setBOOL wszystko jest w porządku. Więc siła skonwertuj niech ios zwariuje. I położenie pliku plist w:/Users/apple/Library/Application Support/iPhone Simulator/5.1/Applications/xxxx-xxxxx-xxxxx/Library/Preferences/com.yourappname.plist –

1

Najlepszym sposobem na zachowanie zapisanych danych jest połączenie z -synchronize w applicationWillTerminate: i applicationWillResignActive: w delegacie aplikacji.

Edit:

Również komentarze steipete na temat korzystania setInteger: TRUE są accurate- użycie setBool: TAK zamiast.

Powiązane problemy