【问题标题】:"unrecognized selector sent to instance" exception error“无法识别的选择器发送到实例”异常错误
【发布时间】:2012-11-08 14:23:35
【问题描述】:

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

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

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

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

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

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

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

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

编辑

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

【问题讨论】:

  • “我已经阅读了所有“无法识别的选择器发送到实例”的答案,但它们似乎不适用于我的情况”。是的,他们这样做。他们都说同样的话:这个对象不是你认为的类的实例。相信错误信息:它告诉你这个对象到底是什么类。然后尝试了解对象是如何成为错误类的。
  • 是的,我现在可以看到,但一直到凌晨才错过。

标签: objective-c ios


【解决方案1】:

那是因为你初始化了一个不可变的 NSDictionary,它没有 setObject:forKey: 方法。改为初始化一个可变的:

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

从 Xcode 4.4 开始,您还可以使用新的字典文字来非常轻松地初始化不可变字典,然后使用 mutableCopy

NSMutableDictionary *objectDynamic = [@{@"pFObject" : pObject, 
                                        @"tFObject" : tObject} mutableCopy];

注意,在 Objective-C 中,变量名应该以小写字母开头。

【讨论】:

  • 对对对,这和我在 AS3 中设置对象的方式很相似,很有趣。
【解决方案2】:

为了能够更改字典的内容,您需要创建NSMutableDictionary,而不是不可变的NSDictionary

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

【讨论】:

  • 哎呀,这会让我知道早上 5 点不要编码 :)
猜你喜欢
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多