cocos2d ccmenuitem无法访问变量,以SIGABRT结尾

时间:2011-07-29 06:01:07

标签: memory-management cocos2d-iphone

我在下面有这个代码。问题是,每次我点击“SPIN”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'

我不知道出了什么问题,我的

这是我的代码。

`#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 `

请帮帮我。这是内存管理问题吗?如果是这样,我该如何解决?

非常感谢!

2 个答案:

答案 0 :(得分:0)

我注意到你在menuItem1上有目标:nil而不是target:self。这个错误发生在menuItem2上,所以我不确定它是否相关。前几天我得到了一个非常类似的错误,它归结为错误的目标。乍一看,代码中的其他所有内容对我来说都很合适。

答案 1 :(得分:0)

这个错误总是意味着它读起来的意思。您已向不理解该消息的对象发送消息(意味着该对象没有处理此类请求的方法)。但是,这也意味着您正在向不存在的对象发送消息。

如果您尝试访问错误的数组索引(或实际不存在的数组的索引),则会获得错误的访问权限。如果您尝试访问不存在的方法或不存在的对象方法,则会收到无法识别的选择器消息。

看到您分配或初始化数组。我不知道什么是shuffle,你还没有为它发布代码。它可能是我知道的所有内置方法。我相当确定你需要做的就是分配和初始化你的数组。

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