“无法识别的选择器发送到实例”异常错误

时间:2012-11-08 14:23:35

标签: objective-c ios

我已经阅读了所有“无法识别的选择器发送到实例”的答案,但它们似乎不适用于我的情况。

我已经设置了像这样的NSMutableDictionary ......

  NSMutableDictionary *ObjectDynamic = [NSDictionary dictionaryWithObjectsAndKeys:pObject, @"pFObject",tObject, @"tFObject",nil];

然后在代码中的某个稍后点我试图添加另一个对象/键,用这个......

[ObjectDynamic setObject:mySprite forKey:@"pSObject"];

但是我在那条线上得到了一个例外,其中......

  

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

是否无法添加其他键/值对?

修改

简单的错误,我只是想创建一个NSDictionary而不是NSMutableDictionary!无论如何,谢谢你的答案。

2 个答案:

答案 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
];