3 Stimmen

Speichern von NSMutableArray mit NSUserDefaults

In meinem Projekt verwende ich eine NSMutableArray in meiner App delegieren mit NSUserDefaults :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

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

und

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

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

Das Problem ist, dass, wenn ich in einer Klasse schreibe, zum Beispiel firstViewController.m, in viewdidload:

NSLog(@"number of element:%d", appDelegate.array.count);

ist das Ergebnis immer "2", aber wenn ich schreibe

[appDelegate.array removeAllObjects];

dann ist das Ergebnis der Zählung "0". Wenn ich die App neu starte, ist die Anzahl wieder "2". Was kann ich tun, um null Objekte im Array zu haben, wenn ich die Anwendung neu starte?

4voto

ondmike Punkte 501

Sie müssen einen Aufruf von -[NSUserDefaults synchronize] hinzufügen, nachdem Sie den "array"-Wert in applicationWillTerminate aktualisiert haben. Normalerweise wird dies regelmäßig für Sie aufgerufen, aber in Ihrem Fall aktualisieren Sie den Wert bei der Beendigung, so dass Sie explizit veranlassen müssen, dass er vor dem Beenden gespeichert wird.

0voto

davehayden Punkte 3464

Unter Multitasking wird applicationWillTerminate: normalerweise nicht aufgerufen, bevor die Anwendung beendet wird. Sie könnten die Benutzervorgaben mit dem neuen Array-Wert direkt nach der Änderung aktualisieren (und, ja, danach synchronisieren) oder, wenn Sie aus irgendeinem Grund wirklich das Speichern in den Benutzervorgaben verzögern möchten, könnten Sie stattdessen die Delegatenmethode UIApplication applicationWillResignActive: verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X