无法识别的选择器发送到实例

时间:2013-05-23 12:52:41

标签: iphone objective-c cocos2d-iphone

我已经开始在cocos2d-iphone中实现游戏;我在我的项目中使用ARC。

在我@interface中声明的类的主Levelfinder.h中,我声明了以下属性:

@property NSMutableArray* pineapples;

在我的主要课程中,我使用的是这个属性:

for (PineappleModel* pineapple in levelFileHandler.pineapples) 
{
    b2Body* body = [self createPineappleAt:
            [CoordinateHelper levelPositionToScreenPosition:pineapple.position]];
    body->SetLinearDamping(pineapple.damping);
    [pineapplesDict setObject:[NSValue valueWithPointer:body] 
                       forKey:[NSNumber numberWithInt: pineapple.id]];
}

但是当我运行我的代码时,我看到了以下运行时错误:

SIGABRT '-[LevelFileHandler setPineapples:]: unrecognized selector sent to instance 0x9431c60

我是cocos2d的新手,但是很长一段时间都看过这个问题并且卡住了。任何形式的帮助将不胜感激。


以下是LevelFileHandler.h

@interface LevelFileHandler : NSObject

@property NSMutableArray* pineapples;

@end

现在我的LevelFileHandler.m,我已经使用了我的菠萝属性

self.pineapples = [NSMutableArray arrayWithCapacity:5];
[self.pineapples addObject:pineappleModel]

显然,这段代码的目的只是创建一个容量为5的数组。

2 个答案:

答案 0 :(得分:1)

问题正是所说的。您尝试在没有实现setPineapples的类的对象上调用方法。好像你试图在LevelFileHandler类型的对象上调用setPineapples,即使是类名,也不建议它与菠萝有关:P。

您并未在此代码段中的任何位置调用此方法。所以很难判断究竟是什么问题。

注意意外分配。 UIKit的例子是

UITextView text = [UITextView alloc] init];
//few lines later, you do this
text = [SomeClass returnStringAsIDType];
//crash sometime later as textView becomes a string.

由于Objective-C是动态类型的,因此任何将id类型的内容分配给具有错误类类型的变量(如果您期望的类型不是实际分配的类型)的任何赋值都不会显示警告。你可以花很多时间挠头,想知道为什么你的UITextView突然变成了NSString。

答案 1 :(得分:0)

[[self class] setPineapples:something]中似乎有类似createPineappleAt:的内容。

或者,也许原子参考有问题。属性是原子的并且默认合成。你能尝试一下:

@interface LevelFileHandler : NSObject

@property (strong, nonatomic) NSMutableArray* pineapples;

@end