2011-07-29 10 views
0

私は以下のコードを持っています。cocos2d ccmenuitemは変数にアクセスできない、SIGABRTで終わる

ここでは、コンソールでの出力です:

2011-07-29 13:52:52.906 HelloWorld[1031:207] -[NSCFString shuffle]: unrecognized selector sent to instance 0x6833c90 2011-07-29 13:52:52.976 HelloWorld[1031:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString shuffle]: unrecognized selector sent to instance 0x6833c90'

私はドン」:事は、私が「SIGABRTは、プログラムが信号を受信した」と「SPIN」ccmenuitem、プログラムがクラッシュをクリックするたびにあります何が間違っているのかわかります。

ここに私のコードです。

`#import <Foundation/Foundation.h> 
#import "cocos2d.h" 

@interface GameScene : CCLayer { 
    NSMutableArray * answersArray; //holds all valid answers 
    NSMutableArray * lettersArray; //holds placement of letters to display 
    NSMutableArray * userAnswerArray; //holds user's answer to check and submit 
    NSString * THEWORD;    //the word 
} 

+(id) scene; 
.... 
- (void) spinWord; 
- (void) playWord; 


@end` 

そして、この実装:

`

@implementation GameScene 

+(id) scene { ... } 
-(id) init 
{ 
    if((self=[super init])) { 
     ...//everything is initialized 
     [self initImages] 
     ... 
    }  
} 
- (void) initImages 
{ 
    .... 
    CCMenuItem *menuItem1 = [CCMenuItemImage itemFromNormalImage:@"PLAYunselected.png" selectedImage:@"PLAYselected.png" target:nil selector:@selector(onPlayWord)]; 

    CCMenuItem *menuItem2 = [CCMenuItemImage itemFromNormalImage:@"SPINunselected.png" selectedImage:@"SPINselected.png" target:self selector:@selector(spinWord)]; 

    CCMenu *menu = [CCMenu menuWithItems:menuItem1, menuItem2, nil]; 
    [menu alignItemsHorizontally]; 
    menu.position = ccp(72, 198); 
    [self addChild:menu z:2]; 

} 
- (void) spinWord{ 
    //NSLog(@"%@",lettersArray); <---if I uncomment this line, I get an EXC_BAD_ACCESS message instead 
    [lettersArray shuffle]; // <--- this line causes the SIGABRT signal, even if it's initialized. 
    NSLog(@"%@",lettersArray); 
    ... 
} 

@end `

が私を助けてください。これはメモリ管理の問題ですか?もしそうなら、私はそれをどのように修正するのですか?

ありがとうございました!

+0

あなたはlettersArray –

答えて

0

このエラーは、常にそれが意味するように正確に読み取ることを意味します。あなたは、そのメッセージを理解していないオブジェクトにメッセージを送りました。つまり、オブジェクトには、そのような要求を処理するメソッドがありません。しかしこれは、存在しないオブジェクトにメッセージを送信していることを意味することもあります。

不良アレイインデックス(または実際には存在しないアレイのインデックス)にアクセスしようとすると、不正なアクセスが発生します。存在しないメソッドまたは存在しないオブジェクトのメソッドにアクセスしようとすると、認識できないセレクタ・メッセージが表示されます。

あなたの配列の割り当てまたは初期化を参照してください。私はシャッフルが何であるかわからない、あなたはそれのためのコードを投稿していない。それは私が知っているすべてのための方法で構築されているかもしれません。あなたがする必要があるのは、配列を割り当てて初期化することだけです。

NSMutableArray * answersArray = [[NSMutableArray alloc] init]; 
// And so on with your other arrays. 
0

target:targetの代わりにnilが表示されていました:menuItem1のself。 menuItem2でエラーが発生しているので、それが適切かどうかはわかりません。先日私は非常に似たようなエラーを出していましたが、間違ったターゲットに下がってきました。一見すると、あなたのコードにあるものはすべて私には分かります。

+0

内のコンテンツを持っていけないこともあり、私は自分にMENU1のターゲットを変更し、それはまだそれが出てエラーになります。 – kazuo

+0

その場合、lettersArrayを詳しく見ていきます。どのように作成されますか(alloc/init)、いつリリースされますか? EXC_BAD_ACCESSは、通常、解放されたデータにアクセスしようとするか、最初に存在しないデータにアクセスしようとすると発生します。 –

関連する問題