0

私はこれを持っています:

//Node.h

 @interface Node: CCSprite{
 BOOL wasTouched;
 }
 -(BOOL)getTouched;
 // some other methods

 //Node.m

 -(BOOL)getTouched{
 return wasTouched;
 }

-(id)init{
    wasTouched=NO;
    }

//wasTouched changes in the other methods..when they are called (no problem here)


//Game.m

//i make an array of nodes and do some stuff

-(void)someMethod{
    for (Node *node in arrayOfNodes){
    if ([node getTouched]) {  //here it crashes
    //code
    }}}

メッセージでクラッシュします-[CCSprite getTouched]: unrecognized selector sent to instance 0x236dd0

問題は: なぜ?!

4

2 に答える 2

0

Nodes 配列にプレーンな CCSprite を挿入した可能性があります。

于 2012-05-20T11:01:15.633 に答える
0
-(id)init{
    wasTouched=NO;
    }

これは痛いです。:(

init メソッドのスーパー実装を常に呼び出す必要があります。ここでも自分自身を返す必要があります。コンパイラは、戻り値の欠落について不平を言いませんでしたか? アドバイス: コンパイラの警告を無視しないでください。

これはどちらも、私が推測するクラッシュを含む、非常に奇妙な動作につながる可能性があります。修正は次のとおりです。

-(id) init
{
    self = [super init];
    if (self)
    {
        wasTouched = NO;
    }
    return self;
}
于 2012-05-21T09:07:01.107 に答える