gpt4 book ai didi

ios - 由于尝试写入我认为是可变字典的内容,当我重新进入 TableViewController 时崩溃

转载 作者:行者123 更新时间:2023-11-28 19:48:35 25 4
gpt4 key购买 nike

我创建并保存到 NSUSerDefaults 中的以下嵌套可变字典

self.configDict is {
objectsDict = {
"40E1507D" = {
lastUpdate = "2015-05-30 05:02:40 +0000";
subObjects = {
"D84EA15E" = {
lastUpdate = "2015-05-30 05:02:40 +0000";
show = 1;
title = subObjectOne;
};
"F20047D4" = {
lastUpdate = "2015-05-30 05:02:40 +0000";
show = 1;
title = GreenObject;
};
};
title = Default;
};
"9EE82B8F" = {
lastUpdate = "2015-05-30 05:02:40 +0000";
subObjects = {
"AEF3F442" = {
lastUpdate = "2015-05-30 05:02:40 +0000";
show = 1;
title = YellowObject;
};
};
title = Other;
};
};
lastUpdate = "2015-05-30 05:02:40 +0000";
showAllObjects = 1;
}

在我的 TableView Controller 中,当我第一次进入它 (viewDidLoad) 时,我会这样加载 NSUserDefaults

self.configDict = [[defaults objectForKey:@"Config"] mutableCopy];

在我的 .h 中,我的字典定义如下:

@property (strong, nonatomic) NSMutableDictionary *configDict;

然后我继续更新其中的一些字段,比如上次更新时间:

NSMutableDictionary *subObjectDict = objectsDict[@"40E1507D"][@"subObjects"][@"D84EA15E"];
subObjectDict[@"lastUpdate"] = [NSDate date];

这一切都很好,我用

结束了一切
[[NSUserDefaults standardUserDefaults] synchronize];

当我退出 TableView Controller 并重新进入时发生崩溃。上面的代码如上所述重新执行,但是一旦我点击语句:

subObjectDict[@"lastUpdate"] = [NSDate date];

它因以下错误而崩溃:2015-05-29 22:53:30.029 myApp[12837:128350] * 由于未捕获的异常 'NSInternalInconsistencyException' 而终止应用程序,原因:'-[__NSCFDictionary setObject:forKey:]: 变异方法发送到不可变对象(immutable对象)'* 首先抛出调用栈:

是不是因为我有嵌套的字典,而可变副本没有执行深拷贝?为什么当我从 NSUserDefaults 读取字典时它第一次工作,但当我重新输入 TVC 时它崩溃了。

最佳答案

您正在使用 mutableCopy在最外层的字典上,但这不会使内部字典可变——它们仍然是不可变的字典,因为这是 NSUserDefaults 返回的内容。 .

我的猜测是,第一次通过您的代码时,子词典不存在或为零 - 如果没有看到更多代码,很难说。不管异常方法是否非常清楚——您正试图改变一个不可变对象(immutable对象),因此您需要先制作一个可变副本。

关于ios - 由于尝试写入我认为是可变字典的内容,当我重新进入 TableViewController 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30542955/

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