我想从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
非常感谢
答案 0 :(得分:2)
我怀疑ScoreLayer是在你打电话之前发布的。我不太熟悉assign
,我只写过ARC Objective-C;但我认为它与弱者大致相同(对于代表来说应该如此)。这意味着为了使该指针有效,应用程序中的其他人需要“拥有”ScoreLayer。
现在,正如所说的那样,我只假设你首先正确连接这两个对象。没有发布的代码显示了这一点,但是这个可能发布的ScoreLayer的问题非常重要,无论如何要记住。
答案 1 :(得分:-2)
您将在HelloWorldLayer
的接口文件中声明该协议(委托方法)。然后,您将委托方法放在ScoreLayer.m
:
-(void)updateScore:(int)num {
// Do something
}
现在的方式,你在错误的类中声明了协议。