在NSUserDefaults中的NSDictionary中设置嵌套值

时间:2014-11-15 17:13:10

标签: ios nsdictionary nsuserdefaults

我想这样做:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue@"nextFoo" forKeyPath@"values.foo"];

...

值在代码的前面被推入默认值:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *values = [NSMutableDictionary alloc] init];
[values setObject@"firstFoo" forKey:@"foo"];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:values forKey:@"values"];

我猜测无论将一个Mutable Dictionary推入用户默认值,它都会被存储为一个不可变的字典。我试图采用一个快捷方式,允许我设置一个嵌套值,而不会使值字典变为可变,在那里设置值,然后再次设置值,即我试图解决的更长版本

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *values = [[defaults objectForKey:@"values"] mutableCopy];
[values setObject@"nextFoo" forKey:@"foo"];
[defaults setObject:values forKey:@"values"];  // set the entire values dictionary again, even though I really only needed to set one nested value

1 个答案:

答案 0 :(得分:3)

这是一个常见错误,但您需要使用setObject:方法来处理NSUserDefaults,而不是setValue:,因此setValue:forKeyPath:对您也没有帮助。您只需要取出字典并设置值然后重新设置字典。