为什么我的自定义委托方法没有接到电话?

时间:2012-06-24 03:49:40

标签: objective-c delegates protocols

我想从HelloWorldLayer发送消息,并在ScoreLayer中接收它,以便更新标签。 CCLOG(@"///addNewScore");工作正常,但在ScoreLayer中updateScore没有接到电话,你知道为什么吗?这是我的代码:(编辑:我在@property中尝试使用“retain”,但没有任何变化):

@interface HelloWorldLayer : CCLayer
{
    //...
    id<ScoreDelegate>delegate;
}

@property (nonatomic,retain) id <ScoreDelegate> delegate;


@implementation HelloWorldLayer
@synthesize delegate;
//...
-(void)addNewScore:(int)num{
    CCLOG(@"///addNewScore");//works fine
    [delegate updateScore:num];
}


#import <Foundation/Foundation.h>

@protocol ScoreDelegate
-(void)updateScore:(int)num;
@end

@interface ScoreLayer : CCLayer <ScoreDelegate>{
    //...
}

-(void)updateScore:(int)num{
    CCLOG(@"hello");//DOES NOT WORK
}

@end

非常感谢

2 个答案:

答案 0 :(得分:2)

我怀疑ScoreLayer是在你打电话之前发布的。我不太熟悉assign,我只写过ARC Objective-C;但我认为它与弱者大致相同(对于代表来说应该如此)。这意味着为了使该指针有效,应用程序中的其他人需要“拥有”ScoreLayer。

现在,正如所说的那样,我只假设你首先正确连接这两个对象。没有发布的代码显示了这一点,但是这个可能发布的ScoreLayer的问题非常重要,无论如何要记住。

答案 1 :(得分:-2)

您将在HelloWorldLayer的接口文件中声明该协议(委托方法)。然后,您将委托方法放在ScoreLayer.m

-(void)updateScore:(int)num {
    // Do something
}

现在的方式,你在错误的类中声明了协议。