1

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

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

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

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

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

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

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

不能像这样添加另一个键/值对吗?

编辑

一个简单的错误,我只是想制作一个 NSDictionary 而不是 NSMutableDictionary!无论如何,感谢您的回答。

4

2 回答 2

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 中,您应该以小写字母开头的变量名。

于 2012-11-08T14:25:54.430 回答
1

为了能够更改字典的内容,您需要 make NSMutableDictionary,而不是 immutable NSDictionary

NSMutableDictionary *ObjectDynamic = [NSMutableDictionary // <<== Here
    dictionaryWithObjectsAndKeys:pObject, @"pFObject",tObject, @"tFObject",nil
];
于 2012-11-08T14:25:46.257 回答