【问题标题】:Calling Objective C Instance Method from Another Class从另一个类调用 Objective C 实例方法
【发布时间】:2010-10-12 02:33:58
【问题描述】:

我有一个名为“HelloWorld.m”的类和另一个名为“Person.m”的类。我在 HelloWorld.m 类中声明了 Person 实例,如下所示:

Person *person;

现在,当用户触摸屏幕时,我会触发以下方法:

[person foo]; 

但我收到错误消息说发送了无效的选择器。

注意:Person 类继承自 CCSprite 类。我究竟做错了什么?

Person.h:

-(void) foo; 

Person.m:

-(void) foo 
{
    NSLog(@"foo called!");
}

更新 1:在 HelloWorld.h 和 HelloWorld.m 中,我已将 person 声明为属性。这是对 person.foo 方法的调用。

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

    [self.person foo]; 
}

HelloWorld.h:

// When you import this file, you import all the cocos2d classes
#import "cocos2d.h"
#import "Person.h" 

// Importing Chipmunk headers
#import "chipmunk.h"

// HelloWorld Layer
@interface HelloWorld : CCLayer
{
    cpSpace *space;
    Person *person; 

}

// returns a Scene that contains the HelloWorld as the only child
+(id) scene;
-(void) step: (ccTime) dt;
-(void) addNewSpriteX:(float)x y:(float)y;

@property (nonatomic,retain) Person *person;


@end

【问题讨论】:

    标签: cocos2d-iphone


    【解决方案1】:

    您是否将 Person 标头导入到 HelloWorld 文件的顶部?

    #import "Person.h"
    

    你初始化人指针了吗?

    person = [[Person alloc] init];
    

    Person 类有 foo 方法吗?

    【讨论】:

    • 是的,我导入了 Person.h。我在 init 方法中初始化了人,是的,人确实有一个 foo 方法。
    • 好像和CCSprite有关。因为它说 [CCSprite foo] unrecognized selector sent to ...
    • 谢谢。我们能看到 person 的 @property 定义吗?
    • @property 是在上面的代码中定义的!谢谢!出于某种原因,我认为它为方法 foo 而不是 Person 类寻找 CCSprite(Person 的基类)。
    • 我正在查看我经常犯的错误列表,但我还没有看到任何内容。我同意这个人看起来像是一个 CCSprite,但我看不出是怎么回事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 2011-12-30
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多