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
。
我在 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
。