我想这样做:
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
答案 0 :(得分:3)
这是一个常见错误,但您需要使用setObject:
方法来处理NSUserDefaults,而不是setValue:
,因此setValue:forKeyPath:
对您也没有帮助。您只需要取出字典并设置值然后重新设置字典。