我在下面有这个代码。问题是,每次我点击“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 `
请帮帮我。这是内存管理问题吗?如果是这样,我该如何解决?
非常感谢!
答案 0 :(得分:0)
我注意到你在menuItem1上有目标:nil而不是target:self。这个错误发生在menuItem2上,所以我不确定它是否相关。前几天我得到了一个非常类似的错误,它归结为错误的目标。乍一看,代码中的其他所有内容对我来说都很合适。
答案 1 :(得分:0)
这个错误总是意味着它读起来的意思。您已向不理解该消息的对象发送消息(意味着该对象没有处理此类请求的方法)。但是,这也意味着您正在向不存在的对象发送消息。
如果您尝试访问错误的数组索引(或实际不存在的数组的索引),则会获得错误的访问权限。如果您尝试访问不存在的方法或不存在的对象方法,则会收到无法识别的选择器消息。
我不看到您分配或初始化数组。我不知道什么是shuffle,你还没有为它发布代码。它可能是我知道的所有内置方法。我相当确定你需要做的就是分配和初始化你的数组。
NSMutableArray * answersArray = [[NSMutableArray alloc] init];
// And so on with your other arrays.