NSMutableDictionary自动转换为NSDictionary

时间:2016-04-12 19:12:52

标签: objective-c cocoa nsdictionary nsmutabledictionary

我在objective-c

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

在循环中我尝试向Dict添加内容

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

我正在

  

- [__ NSDictionaryI setObject:forKey:]:无法识别的选择器发送到实例0x6080001a31e0

但为什么呢?我以为我在循环的标题处将Dict设置为可变的。 感谢

2 个答案:

答案 0 :(得分:0)

这是因为service account内的实际类型是 Mapper.RegisterCustom<Tag, string>((tag) => tag.Name); Mapper.Register<Product, ProductViewModel>(); Mapper.Compile(); ,尝试在设置对象之前创建myArrayOfDicts
通过仅声明NSDictionary,您只是在编译时进行转换,但在运行时,情况会有所不同。

答案 1 :(得分:0)

您确定从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添加了相同的键值对。