我已经阅读了所有“无法识别的选择器发送到实例”的答案,但它们似乎不适用于我的情况。
我已经设置了像这样的NSMutableDictionary ......
NSMutableDictionary *ObjectDynamic = [NSDictionary dictionaryWithObjectsAndKeys:pObject, @"pFObject",tObject, @"tFObject",nil];
然后在代码中的某个稍后点我试图添加另一个对象/键,用这个......
[ObjectDynamic setObject:mySprite forKey:@"pSObject"];
但是我在那条线上得到了一个例外,其中......
- [__ NSDictionaryI setObject:forKey:]:无法识别的选择器发送到实例
是否无法添加其他键/值对?
修改
简单的错误,我只是想创建一个NSDictionary而不是NSMutableDictionary!无论如何,谢谢你的答案。
答案 0 :(得分:5)
那是因为你初始化了一个没有setObject:forKey:
方法的不可变NSDictionary。初始化一个可变的:
NSMutableDictionary *ObjectDynamic = [NSMutableDictionary
dictionaryWithObjectsAndKeys:pObject, @"pFObject",tObject, @"tFObject",nil];
从Xcode 4.4开始,你也可以使用新的字典文字来非常容易地初始化不可变字典,然后使用mutableCopy
。
NSMutableDictionary *objectDynamic = [@{@"pFObject" : pObject,
@"tFObject" : tObject} mutableCopy];
请注意,在Objective-C中,您应该使用小写字母开始变量名称。
答案 1 :(得分:1)
为了能够更改字典的内容,您需要制作NSMutableDictionary
,而不是不可变的NSDictionary
:
NSMutableDictionary *ObjectDynamic = [NSMutableDictionary // <<== Here
dictionaryWithObjectsAndKeys:pObject, @"pFObject",tObject, @"tFObject",nil
];