0

MacでCocos2Dで遊んでいます。

NSColorWell ボタンで IntefaceBuilder を使用しています。私の AppDelegate には、Settings というシングルトンで背景色を設定するための IBAction があります。次に、AnimationLayer のメソッドを呼び出しupdateBackgroundColorて更新します。しかし、それは失敗し、クラッシュします。

AnimationLayer メソッドにメッセージを送信できないのはなぜですか?

AppDelegate はすでに AnimationLayer について知っているので、これはメソッドを呼び出す適切な方法ではありませんか?[(AnimationLayer*) self methodNameHere];

AppDeletgate.m

- (IBAction)colorwellBackground:(id)sender {
    [mySettings setBackgroundColor:[sender color]];
    [(AnimationLayer*) self updateBackgroundColor];
}

AnimationLayer.m

// Import the interfaces
#import "AnimationLayer.h"

// HelloWorldLayer implementation
@implementation AnimationLayer

+(CCScene *) scene {

    CCScene *scene = [CCScene node];
    AnimationLayer *layer = [AnimationLayer node];
    [scene addChild: layer];
    return scene;
}

// on "init" you need to initialize your instance
-(id) init {

    if( (self=[super init]) ) {

        mySettings = [Settings sharedSettings]; 

        //DEFAULT BACKGROUND COLOR
        _backgroundColorLayer = [mySettings returnBackgroundColor];
        [self addChild:_backgroundColorLayer];


    }
    return self;
}
- (void) updateBackgroundColor{
    NSLog(@"UPDATE BACKGROUND COLOR %@", [mySettings returnBackgroundColor]);
    [_backgroundColorLayer setColor:[mySettings returnBackgroundColor]];
}
4

1 に答える 1

0

まず、アプリがクラッシュした場合、いつでもコンソールでクラッシュの理由を確認できます。「なぜクラッシュするのか」という質問には、常にこのメッセージを追加してください。実際、このメッセージを読んだ後、問題を自分で解決できる可能性が高くなります。

あなたのクラッシュメッセージは、「 appdelegate インスタンスから不明なメソッド updateBackgroundColor を呼び出そうとしています」のようなものだと思います。AppDelegate クラスの self は、レイヤーではなく AppDelegate インスタンスを指しています。アプリケーション デリゲートからこのメソッドを呼び出したい場合 (これは私の考えでは奇妙です)、何らかの方法でアニメーション レイヤーの現在のインスタンスを取得する必要があります。

于 2013-04-12T11:40:20.437 に答える