为什么NSUserDefaults无法保存NSMutableDictionary?

我试图用NSUserDefaults保存一个NSMutableDictionary 。 我阅读了很多关于这个主题的post…我也发现了一个选项,工作; 然而不幸的是,它只工作了一次,然后开始只保存(空)。 有人有提示吗?

谢谢

代码保存:

 [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:dictionary] forKey:@"Key"]; [[NSUserDefaults standardUserDefaults] synchronize]; 

加载代码:

 NSMutableDictionary *dictionary = [[NSMutableDictionary alloc]init]; NSData *data = [[NSUserDefaults standardUserDefaults]objectForKey:@"Key"]; dictionary = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

将对象添加到NSMutableDictionary代码:

 [dictionary setObject:[NSNumber numberWithInt:0] forKey:@"Key 1"]; [dictionary setObject:[NSNumber numberWithInt:1] forKey:@"Key 2"]; [dictionary setObject:[NSNumber numberWithInt:2] forKey:@"Key 3"]; 

代码到NSLog()值:

 for (NSString * key in [dictionary allKeys]) { NSLog(@"key: %@, value: %i", key, [[dictionary objectForKey:key]integerValue]); } 

而且关键是(空):

 NSLog(@"%@"[dictionary allKeys]); 

从Apple的NSUserDefaults objectForKey的文档:
即使您最初设置的值是可变的,返回的对象也是不可变的。

该行:

 dictionary = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

丢弃之前创build的NSMutableDictionary并返回一个NSDictionary

将加载更改为:

 NSData *data = [[NSUserDefaults standardUserDefaults]objectForKey:@"Key"]; dictionary = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

完整的例子,在这个例子中也不需要使用NSKeyedArchiver

 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输出:
键:键2,值:1
键:键1,值:0
键:键4,值:4
键:键3,值:2