Я пишу игру, в которой класс MainGameplay отслеживает, чей это ход, установив для значения ivar значение enum:
typedef enum {
GAME_NOT_STARTED,
PLAYER_1_TO_MOVE,
PLAYER_2_TO_MOVE
} WhoseTurnIsIt;
Затем класс GameBoard проверяет, является ли попытка перемещения допустимой,и вызывает turnEnded:(WhoseTurnIsIt)turn
или reportTurnFailure:(WhoseTurnIsIt)turn
в MainGameplay.m.
Я получаю EXC_BAD_ACCESS, как только я пытаюсь получить доступ к этому возвращенному значению обратно в MainGameplay, в методах получения.Похоже, я должен сохранить что-то, но вы не можете сохранить перечисление.В отладчике есть значения, поэтому я не понимаю, к чему обращаются неправильно.
Это код, выполняющий вызов в GameBoard:
-(void)buttonPressed:(id)sender {
CCArray *kids = [[[CCDirector sharedDirector] runningScene] children];
if (!mainScene) { // mainScene is an ivar on each the GameBoard's buttons.
for (CCScene *s in kids) {
// this looks crazy because the "main" scene is actually a controlling layer that has as a child the main gameplay layer:
if ([s isKindOfClass:[ControlLayer class]]) {
self->mainScene = (MainGameplay *)((ControlLayer *) s).gameLayer;
}
}
}
if (MOVE_NO_ERROR == [self checkMove:mainScene.turn]) {
[self setMove:mainScene.turn];
[mainScene turnEnded:mainScene.turn]; // This line and the next are the ones causing the EXC_BAD_ACCESS
} else [mainScene reportTurnFailure:mainScene.turn]; // This line too.
}
EDIT Функции в вызываемой mainScene выглядят так:
-(void) reportTurnFailure:(WhoseTurnIsIt)_turn {
NSLog(@"MainScene still valid"); // This line works fine
NSLog(@"Bzzzzzt. Player %@, try again", _turn); // This line crashes BUT _turn shows up with a proper value in the debugger.
}