I’m trying to save a NSMutableDictionary
with NSUserDefaults
. I read many posts on the topic in stackoverflow... I also found one option that worke
From Apple's documentation for NSUserDefaults objectForKey
:
The returned object is immutable, even if the value you originally set was mutable.
The line:
dictionary = [NSKeyedUnarchiver unarchiveObjectWithData:data];
discards the previously created NSMutableDictionary
and returns a NSDictionary
.
Change the loading to:
NSData *data = [[NSUserDefaults standardUserDefaults]objectForKey:@"Key"];
dictionary = [NSKeyedUnarchiver unarchiveObjectWithData:data];
Complete example, there is also no need to use NSKeyedArchiver
in this example:
NSDictionary *firstDictionary = @{@"Key 4":@4};
[[NSUserDefaults standardUserDefaults] setObject:firstDictionary forKey:@"Key"];
NSMutableDictionary *dictionary = [[[NSUserDefaults standardUserDefaults] objectForKey:@"Key"] mutableCopy];
dictionary[@"Key 1"] = @0;
dictionary[@"Key 2"] = @1;
dictionary[@"Key 3"] = @2;
for (NSString * key in [dictionary allKeys]) {
NSLog(@"key: %@, value: %@", key, [dictionary objectForKey:key]);
}
NSLog output:
key: Key 2, value: 1
key: Key 1, value: 0
key: Key 4, value: 4
key: Key 3, value: 2