cocos2d ccmenuitem не может получить доступ к переменным, заканчивается на SIGABRT - PullRequest
0 голосов
/ 29 июля 2011

У меня есть этот код ниже. Дело в том, что каждый раз, когда я нажимаю на ccmenuitem «SPIN», программа вылетает с сообщением «Программа получила сигнал: 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);
    ...
}

@ конец `

Пожалуйста, помогите мне. Это проблема управления памятью? Если да, то как мне это исправить?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 30 июля 2011

Эта ошибка всегда означает именно то, что она читает, как это означает.Вы отправили сообщение объекту, который не понимает это сообщение (имеется в виду, что у объекта нет метода для обработки такого запроса).Однако это также может означать, что вы отправляете сообщение объекту, который не существует.

Если вы пытаетесь получить доступ к неверному индексу массива (или к индексу массива, который на самом деле не существует), вы получите плохой доступ,Если вы попытаетесь получить доступ к методу, который не существует, или к методу объекта, который не существует, вы получите сообщение о нераспознанном селекторе.ваши массивы.Я не знаю, что такое shuffle, вы не опубликовали для него код.Это может быть встроенный метод для всех, что я знаю.Я совершенно уверен, что все, что вам нужно сделать, это выделить и инициализировать ваши массивы.

NSMutableArray * answersArray = [[NSMutableArray alloc] init];
// And so on with your other arrays.
0 голосов
/ 29 июля 2011

Я заметил, у вас есть target: nil вместо target: self в menuItem1.Ошибка происходит в menuItem2, поэтому я не уверен, что это актуально.Я получил очень похожую ошибку на днях, и это привело к неправильной цели.Все остальное в вашем коде на первый взгляд выглядит нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...