2011-09-27 11 views
8

Chcę zapisać tablicę z NSUserDefault więc umieścić w applicationDidEnterBackgroundIOS: przechowywać tablicę z NSUserDefault

[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"]; 

aw application didFinishLaunchingWithOption

myArray= [[NSMutableArray alloc] 
      initWithArray:[[NSUserDefaults standardUserDefaults] 
      objectForKey:@"myArray"]]; 

jest ok dla urządzenia wielozadaniowość, ale dla urządzenie bez multitaskingu, jak mogę rozwiązać?

Odpowiedz

10

przechowywać obiekt w NSUserDefaults w -applicationWillTerminate:, jeżeli nie zostało już zapisane przez pw -applicationDidEnterBackground: (czyli sprawdzić czy wielozadaniowość jest obsługiwana, jeśli tak jest, to nie oszczędzać, bo to już zostało zapisane.)

- (void) applicationWillTerminate:(UIApplication *) app { 
    if([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)] && 
     ![[UIDevice currentDevice] isMultitaskingSupported]) { 
     [[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"]; 
    } 
} 
+0

Jak wskazano w innej odpowiedzi, należy zsynchronizować ustawienia domyślne po ustawieniu obiektu. [[NSUserDefaults standardUserDefaults] zsynchronizować]; – user3246173

0

Zapisz NSUserDefaults na

- (void)applicationWillTerminate:(UIApplication *)application 
0

ustawić

[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"]; 

w

applicationWillTerminate 
3

poprzedniej odpowiedzi są poprawne, ale należy pamiętać, że ani applicationDidEnterBackground ani applicationWillTerminate są gwarantowane być nazywany we wszystkich sytuacjach. Zazwyczaj lepiej przechowywać ważne dane, gdy tylko się zmieniły.

7

Nie zapomnij zsynchronizować bufor przed pójściem na tle:

[[NSUserDefaults standardUserDefaults] synchronize]; 
0

i nie zapomnij użyć encodeWithCoder i initWithCoder wewnątrz obiektu, który próbujesz zapisać i który jest zawarty w tablicy

Powiązane problemy