gpt4 book ai didi

iphone - 处理从 NSUserDefaults 返回的对象时遇到问题

转载 作者:行者123 更新时间:2023-11-29 10:53:50 25 4
gpt4 key购买 nike

我是 ios 编程的新手,上个月才开始学习。

过去两天我一直被一个问题困扰。我不知道如何自己解决这个问题。

所以,我想请你帮我解决这个问题!

这是我遇到的错误。

[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'

我了解到我收到此错误是因为我从 NSUserDefaults 获得的对象始终是不可变的。

所以,我 mutableCopy 数组,我想向其中添加新对象。

    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 = (
);
}
)

最佳答案

您正试图改变作为数组对象之一的不可变字典。

尝试以下操作:

- (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];

}

关于iphone - 处理从 NSUserDefaults 返回的对象时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19329566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com