我已经开始在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的数组。
答案 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