0

この問題は何日も私を混乱させてきました。NSString 'spriteType' があります。プロパティと合成メソッドを使用して宣言されます。文字列が作成されるレイヤーで、CCNode も作成します。ノードはメソッドで作成されます。

- (void) spritePick {

CCMenuItemImage *go = [CCMenuItemImage itemFromNormalImage:@"button_go.png" selectedImage:@"button_go_selected.png" target:self selector:@selector(test)];
spritePickMenu = [CCMenu menuWithItems:go, nil];
spritePickMenu.position = ccp(0,0);

spritePick = [CCNode node];
[spritePick addChild:spritePickMenu];
spritePick.position = ccp(240,160); 
[self addChild: spritePick];
}

ボタンから呼び出される 'test' メソッドは単純です。

- (void) test {
NSLog(@"%@",spriteType);
}

NSLog 行でゲームがクラッシュし、次のエラーが表示されます: EXC_BAD_ACCESS

「test」メソッド内以外のどこでも、コードは正常に機能します。メソッドがノードから呼び出されたときにエラーが発生するのに、他の場所から呼び出されたときにエラーが発生しないのはなぜですか?

必要に応じて、完全なコードを提供できます。

4

1 に答える 1

1

spriteTypeプロパティ宣言にどの属性を使用していますか?

プロジェクトで ARC を使用している場合、ヘッダーは次のようになります。

@property (nonatomic, strong) NSString *spriteType;

実装は次のようになります。

@synthesize spriteType = spriteType_;

この方法でプロパティを宣言/合成するNSLog(@"%@", self.spriteType)と、コンソールに(null)が書き込まれます(再確認するためにテストしました)。

self.バッキング ivar に直接アクセスしようとするのではなく、を使用してプロパティにアクセスすることをお勧めします。

EXC_BAD_ACCESS を見ているので、への強い参照を維持していないと思いますself.spriteType.

プロジェクトで ARC を使用している場合は、この回答で詳しく説明されているように、LLVM 3.0 以降でコンパイルしていることを確認する必要があります。

于 2012-05-31T15:53:43.733 に答える