我在保存NSMutableDictionary时遇到问题。我正在尝试将其保存到NSUserDefaults,然后加载并更改蓝色,然后再次保存。
所以我最初是这样的:
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithObjectsAndKeys:
firstNameLbl, @"firstName",
lastNameLbl, @"lastName",
nil];
[[NSUserDefaults standardUserDefaults] setObject:d forKey:@"youDict"];
[[NSUserDefaults standardUserDefaults] synchronize];
然后我加载它并尝试更改这样的值:
NSMutableDictionary *d = [[NSUserDefaults standardUserDefaults] objectForKey:@"youDict"];
[d setObject:textField.text forKey:key];
[[NSUserDefaults standardUserDefaults] setObject:d forKey:@"youDict"];
[[NSUserDefaults standardUserDefaults] synchronize];
但是,[d setObject:textField.text forKey:key];
这一行会导致应用程序崩溃,我收到此错误:
'NSInternalInconsistencyException', reason: '-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'
objectForKey 为 NSUserDefaults 返回一个不可变值。要完成这项工作,请将第二个代码块的第一行替换为以下内容:
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithDictionary: [[NSUserDefaults standardUserDefaults] objectForKey:@"youDict"]];
NSUserDefaults 不区分可变和不可变对象,所以当你把它拿回来时,它将是不可变的:
如果你想要一个可变的字典,只需使用mutableCopy:
NSMutableDictionary *d = [[[NSUserDefaults standardUserDefaults] objectForKey:@"youDict"] mutableCopy];
希望,这会对你有所帮助...
尝试使用此代码,我认为我们会对您有所帮助。
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithDictionary: [[NSUserDefaults standardUserDefaults] ValueForKey:@"youDict"]];