Set Value NSMutableDictionary?



我在保存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"]];

最新更新