Iphone 处理从NSUserDefaults返回的对象时遇到问题
我是ios编程新手,上个月才开始学习 有一个问题我在过去的两天里一直困扰着。 我自己想不出怎么解决这个问题 所以,我想请你帮个忙,帮我解决这个问题 这就是我得到的错误Iphone 处理从NSUserDefaults返回的对象时遇到问题,iphone,ios,objective-c,Iphone,Ios,Objective C,我是ios编程新手,上个月才开始学习 有一个问题我在过去的两天里一直困扰着。 我自己想不出怎么解决这个问题 所以,我想请你帮个忙,帮我解决这个问题 这就是我得到的错误 [__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object' 我了解到我得到这个错误是因为我从NSUserDefaults得到的对象总是不可变的 因此,我可以复制我想要添加新对象的数组 NSMutableArray *tem
[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'
我了解到我得到这个错误是因为我从NSUserDefaults得到的对象总是不可变的
因此,我可以复制我想要添加新对象的数组
NSMutableArray *temporaryArray = [users[1][@"users"] mutableCopy];
[temporaryArray addObject:myData];
users[1][@"users"] = temporaryArray;
但是,当然,在上面的第三行,它会导致相同的错误
我知道它导致此错误的原因,但我不知道如何编写代码来解决此问题。我认为解决方案非常简单和基本,但我不知道如何解决
如果有人帮我解决这个问题,我将不胜感激
提前非常感谢
- (void)saveData
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *users = [userDefaults objectForKey:@"users"];
NSDictionary *myData = @{@"name":@"test", @"birthdate":@"1981-01-01", @"sex":@"male"};
NSMutableArray *temporaryArray = [users[1][@"users"] mutableCopy];
[temporaryArray addObject:myData];
users[1][@"users"] = temporaryArray;
[userDefaults setObject:users forKey:@"users"];
[userDefaults synchronize];
[self.target performSelector:self.action withObject:@"test.png"];
[self dismissViewControllerAnimated:YES completion:nil];
}
用户数组的结构。
(
{
label = "\U81ea\U5206";
users = (
{
birthdate = "2013-10-12";
name = Test;
sex = "\U7537\U6027";
}
);
},
{
label = "Family(\U5bb6\U65cf)";
users = (
);
},
{
label = "Friends(\U53cb\U9054)";
users = (
);
}
)
您获得的数组
用户
不是可变副本:
NSMutableArray *users = [userDefaults objectForKey:@"users"];
您正在对同一数组使用临时数组
、临时数组
和测试数组
?打字错误我想你想要的是:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *users = [[userDefaults objectForKey:@"users"] mutableCopy];
NSDictionary *myData = @{@"name":@"test", @"birthdate":@"1981-01-01", @"sex":@"male"};
NSMutableArray *usersNested = [users[1][@"users"] mutableCopy];
[usersNested addObject:myData];
[users replaceObjectAtIndex:1 withObject:usersNested];
[userDefaults setObject:users forKey:@"users"];
[userDefaults synchronize];
您正试图变异数组对象之一的不可变字典 请尝试以下操作:
- (void)saveData
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *users = [[userDefaults objectForKey:@"users"] mutableCopy];
NSDictionary *myData = @{@"name":@"test", @"birthdate":@"1981-01-01", @"sex":@"male"};
//Create a mutable copy of the dictionary object at index 1.
NSMutableDictionary* mutableUsers = [users[1] mutableCopy]
NSMutableArray *temporaryArray = [mutableUsers[@"users"] mutableCopy];
[temporaryArray addObject:myData];
mutableUsers[@"users"] = [temporaryArray copy];
//Replace the dictionary with an immutable copy of the new dictionary.
users[1] = [mutableUsers copy];
[userDefaults setObject:users forKey:@"users"];
[userDefaults synchronize];
[self.target performSelector:self.action withObject:@"test.png"];
[self dismissViewControllerAnimated:YES completion:nil];
}
谢谢你的帮助!是的,临时数组和测试数组应该是临时数组。我犯了一个错误。谢谢您指出。我想将“myData”添加到用户[1][@“users”],而不是“users”。所以,我正在努力解决这个问题。谢谢你的帮助!我刚试过你的密码。但是我得到了这个错误。“”-[\uu NSCFArray objectforkeydsubscript:]:无法识别的选择器发送到实例0x942d7d0'”我在帖子中添加了“user”数组的结构。这与此错误有关系吗?当您在数组而不是字典上调用
[@“users”]
时,会出现此错误。但是根据您的数据模型用户[1]
应该是字典而不是数组。如果您需要帮助,请告诉我。我可能混合了一些对象类型。您尚未提供有关数据结构设置方式的任何信息。用户默认键“users”中保存了什么?请原谅,现在是早上5:53,但是users[1]是字典对象,是吗?如果是,我在文本编辑复制/粘贴中没有看到错误。=]您在其他解决方案中也遇到了此错误。我认为问题在于你保存的数据。您是如何打印数据结构的?什么时候?可能是您的用户默认值已损坏。在我的代码中,我添加了另一个用户。但是在代码中,我们没有告诉表刷新。在您的示例中,没有提到表视图。您需要使用表视图调用视图控制器,并告诉它数据已更改。