ios - NSMutableDictionary:发送到不可变对象(immutable对象)的变异方法

标签 ios objective-c nsuserdefaults nsmutabledictionary mutable

以下代码在尝试移除 ObjectForKey 时返回异常,并显示以下错误消息“将方法发送到不可变对象(immutable对象)”

NSMutableDictionary * storedIpDictionary = (NSMutableDictionary*)[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"dictDeviceIp"];

NSString *key = self.currentDeviceNameText.text;
NSString *ipAddressTemp = [storedIpDictionary objectForKey:key];

[storedIpDictionary removeObjectForKey:key]; <----Crashes here

storedIpDictionary[key] = ipAddressTemp;

不确定是什么问题,可能是因为从 NSUserDefaults 检索字典。

但是下面的代码没有任何问题。

NSMutableDictionary * storedIpDictionary = (NSMutableDictionary*)[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"dictDeviceIp"];
[storedIpDictionary removeAllObjects];

最佳答案

NSUserDefaults 返回不可变对象(immutable对象),即使你放入可变对象。您必须对返回值调用 -mutableCopy 以获得可变集合。

关于ios - NSMutableDictionary:发送到不可变对象(immutable对象)的变异方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25126148/

相关文章:

iphone - 如何判断一个3D旋转的物体离屏幕边缘有多远

ios - 从 UserDefaults 加载颜色时应用程序崩溃(Swift)

swift - 从 NSUserDefaults 中的值更改主视图 Controller 背景颜色

ios - 将 Swift 添加到 Objective-C 项目编译错误

iphone - 使用 UITabBarController 添加持久化 UIView

javascript - 如何使用 onClick 将文本框值递增/递减一个

ios - 如何在Objective-C中播放Lottie动画

ios - 将数据移动到已启动应用程序中的共享组

ios - 跟踪和分析ios中无响应的手势

ios - fetchedResultsController 不过滤 (fetchRequest)