2016-06-30 22 views
1

Ich versuche, ein Objekt aus einem Wörterbuch zu entfernen, das sich in userdefaults befindet.Wie entferne ich ein Objekt in einem NSMutableDictionary, das in einem NSUserDefaults ist

NSMutableDictionary *userDefaults = (NSMutableDictionary*)[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]; 
[userDefaults removeObjectForKey:@"XYZ"]; 

Der obige Code entfernt das gesamte Wörterbuch.

XYZ ist ein NSMutuableDictionary. Ich möchte ein Objekt mit dem Schlüssel "Password" von XYZ entfernen.

+0

Can u mir zeigen die Werte hier userdefault? –

+0

userDefaults enthält drei nützliche Wörterbücher. – Amon

+0

ok .. Wollen Sie also das eine der drei Wörterbücher oder einfach ein Objekt mit dem Schlüssel "XYZ" in einem der Wörterbücher löschen? –

Antwort

3
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSMutableDictionary *dict = [[defaults objectForKey:@"XYZ"] mutableCopy]; 
[dict removeObjectForKey:@"Password"]; 
[defaults setObject:dict forKey:@"XYZ"]; 
+0

Ich habe dies versucht.aber ich bekomme einen Fehler "muting Methode senden an unveränderliche Objekt" – Amon

+3

NSUserDefaults wird eine unveränderliche NSDictionary zurückgeben, eine veränderbare Kopie davon machen. '[[defaults objectForKey: @" XYZ "] mutableCopy]' –

3

Dies sollte es tun:

// Access the dictionary you want to edit as a mutable copy 
NSMutableDictionary *dict = [[[NSUserDefaults standardUserDefaults] objectForKey:@"dictKey"] mutableCopy]; 

// Remove the object for the key 
[dict removeObjectForKey:@"keyToRemove"]; 

// Set the dictionary back in user defaults 
[[NSUserDefaults standardUserDefaults] setObject:dict forKey:@"dictKey"]; 

// Save your changes: 
// If you need 
// In applicationDidEnterBackground: in iOS >= 7.0 
// If you are using iOS < 7.0 
[[NSUserDefaults standardUserDefaults] synchronize]; 
+0

Sie müssen nicht synchronisieren. Ab iOS 7 müssen Sie es nicht mehr anrufen. http://StackOverflow.com/Questions/9647931/nsuserdefaults-synchronize-method – brl214

+0

"Ab iOS 7, die nicht mehr der Fall ist, so möchten Sie möglicherweise in der Anwendung applicationDidEnterBackground Ihrer Anwendung Delegieren aufrufen: oder registrieren Sie die UIApplicationDidEnterBackgroundNotification Benachrichtigung zu tun Das." --- Es wird nicht immer aufgerufen, wenn Sie es möchten, es kann also wirklich nichts schaden, es zu benutzen (solange Sie es nicht jedes Mal aufrufen, wenn Sie NSUserDefaults einstellen). – WMios

+0

Sie haben gerade gesagt/genau gesagt, was ich gesagt habe ... Danke? Warum würdest du es nicht einfach einmal nennen, wenn die App in den Hintergrund tritt, um Leistungsprobleme zu vermeiden? "Da diese Methode automatisch in regelmäßigen Abständen aufgerufen wird, verwenden Sie diese Methode nur dann, wenn Sie nicht auf die automatische Synchronisierung warten können (z. B. wenn Ihre Anwendung gerade beendet wird) oder wenn Sie die Benutzerstandardeinstellungen auf die tatsächlichen Daten aktualisieren möchten obwohl du keine Änderungen vorgenommen hast. " – brl214