NSMutableDictionary 自动转换为 NSDictionary

NSMutableDictionary automatically converts to NSDictionary

我在 objective-c

中有一个 for 循环
for (NSMutableDictionary *editableDict in myArrayOfDicts) 

在我尝试向字典添加内容时的循环中

[editableDict setObject:@"peace" forKey:@"soSome"];

我得到一个

-[__NSDictionaryI setObject:forKey:]: unrecognized selector sent to instance 0x6080001a31e0

但是为什么呢?我以为我在循环的头部将 Dict 设置为可变的。 谢谢

发生这种情况是因为 myArrayOfDicts 中的实际类型是 NSDictionary,请尝试在设置对象之前创建 mutableCopy
通过仅声明 NSMutableDictionary 您只是在编译时进行转换,但在 运行 时情况有所不同。

您确定要从 NSMutableDictionary 个实例开始吗?看看这个例子:

NSMutableDictionary *dict1 = [NSMutableDictionary dictionaryWithObject:@"obj1" forKey:@"key1"];
NSMutableDictionary *dict2 = [NSMutableDictionary dictionaryWithObject:@"obj2" forKey:@"key2"];

NSArray *myArrayOfDicts = @[dict1, dict2];

NSLog(@"%@", myArrayOfDicts);

for (NSMutableDictionary *editableDict in myArrayOfDicts) {
    [editableDict setObject:@"obj2" forKey:@"key2"];
}

NSLog(@"%@", myArrayOfDicts);

您可以自己运行,但结果是:

(
        {
        key1 = obj1;
    },
        {
        key2 = obj2;
    }
)

(
        {
        key1 = obj1;
        key2 = obj2;
    },
        {
        key2 = obj2;
    }
)

查看 dict2 key2 的值现在如何变为 obj2,而将相同的键值对添加到 dict1