Давно пытаюсь решить эту ошибку, надеясь, что кто-то здесь может помочь! : -)
Я использую Cocos2d с Objective-C и имею простую игру. Я только что добавил кнопку «Перезапустить игру», которая возвращает вас в главное меню, чтобы вы могли начать новую игру. Проблема в том, что я получаю EXC_BAD_ACCESS после перезапуска игры.
[self performSelector:@selector(drawone) withObject:nil afterDelay:3];
[self performSelector:@selector(drawtwo) withObject:nil afterDelay:3];
[self performSelector:@selector(drawthree) withObject:nil afterDelay:3];
[self performSelector:@selector(drawfour) withObject:nil afterDelay:3];
[self performSelector:@selector(drawfive) withObject:nil afterDelay:3];
[self performSelector:@selector(drawsix) withObject:nil afterDelay:3];
[self performSelector:@selector(drawseven) withObject:nil afterDelay:3];
[self performSelector:@selector(draweight) withObject:nil afterDelay:3];
[self performSelector:@selector(drawnine) withObject:nil afterDelay:3];
[self performSelector:@selector(drawten) withObject:nil afterDelay:3];
Я запускаю приведенный выше код в 'init', и это приводит к сбою игры во второй игре до конца в линии
-(void)drawone {
Однако, если я хочу закомментировать некоторые из приведенного выше кода, например,
[self performSelector:@selector(drawone) withObject:nil afterDelay:3];
[self performSelector:@selector(drawtwo) withObject:nil afterDelay:3];
[self performSelector:@selector(drawthree) withObject:nil afterDelay:3];
[self performSelector:@selector(drawfour) withObject:nil afterDelay:3];
[self performSelector:@selector(drawfive) withObject:nil afterDelay:3];
/* [self performSelector:@selector(drawsix) withObject:nil afterDelay:3];
[self performSelector:@selector(drawseven) withObject:nil afterDelay:3];
[self performSelector:@selector(draweight) withObject:nil afterDelay:3];
[self performSelector:@selector(drawnine) withObject:nil afterDelay:3]; */
[self performSelector:@selector(drawten) withObject:nil afterDelay:3];
Затем я получаю EXC_BAD_ACCESS на - (void) на этот раз (все еще на второй игре)
В заключение, комментируя больше кода, например,
[self performSelector:@selector(drawone) withObject:nil afterDelay:3];
/* [self performSelector:@selector(drawtwo) withObject:nil afterDelay:3];
[self performSelector:@selector(drawthree) withObject:nil afterDelay:3];
[self performSelector:@selector(drawfour) withObject:nil afterDelay:3];
[self performSelector:@selector(drawfive) withObject:nil afterDelay:3];
[self performSelector:@selector(drawsix) withObject:nil afterDelay:3];
[self performSelector:@selector(drawseven) withObject:nil afterDelay:3];
[self performSelector:@selector(draweight) withObject:nil afterDelay:3];
[self performSelector:@selector(drawnine) withObject:nil afterDelay:3]; */
[self performSelector:@selector(drawten) withObject:nil afterDelay:3];
И он доходит до 6-го воспроизведения (вы можете перезапустить его 5 раз), прежде чем получить EXC_BAD_ACCESS на - (void) drawone
Тот факт, что EXC_BAD_ACCESS меняет местами, и когда он появляется, заставляет меня предположить, что нет проблемы в - (void) drawone, поскольку в некоторых случаях он будет запускаться без проблем. Я слышал, что использование зомби для отладки может помочь: после попытки, к сожалению, это не помогло. Я новичок в Objective-C, поэтому я прошу прощения, если это простая ошибка. Заранее спасибо.
Вот чертеж:
-(void)drawone
{
onepos = (arc4random() % 10) + 1;
if(positions[(onepos - 1)] != 0)
{
positions[(onepos - 1)] = 0;
if(onepos == 1)
{
CCMenuItemImage *one = [CCMenuItemImage itemFromNormalImage:@"one.png" selectedImage:@"onepressed.png"
target:self
selector:@selector(oneclick:)];
onem = [CCMenu menuWithItems:one, nil];
onem.positionInPixels = ccp(53,420);
[self addChild:onem];
}
else if(onepos == 2)
{
CCMenuItemImage *one = [CCMenuItemImage itemFromNormalImage:@"one.png" selectedImage:@"onepressed.png"
target:self
selector:@selector(oneclick:)];
onem = [CCMenu menuWithItems:one, nil];
onem.positionInPixels = ccp((53 + (106 * 1)),420);
[self addChild:onem];
}
else if(onepos == 3)
{
CCMenuItemImage *one = [CCMenuItemImage itemFromNormalImage:@"one.png" selectedImage:@"onepressed.png"
target:self
selector:@selector(oneclick:)];
onem = [CCMenu menuWithItems:one, nil];
onem.positionInPixels = ccp((53 + (106 * 2)),420);
[self addChild:onem];
}
else if(onepos == 4)
{
CCMenuItemImage *one = [CCMenuItemImage itemFromNormalImage:@"one.png" selectedImage:@"onepressed.png"
target:self
selector:@selector(oneclick:)];
onem = [CCMenu menuWithItems:one, nil];
onem.positionInPixels = ccp(53,300);
[self addChild:onem];
}
else if(onepos == 5)
{
CCMenuItemImage *one = [CCMenuItemImage itemFromNormalImage:@"one.png" selectedImage:@"onepressed.png"
target:self
selector:@selector(oneclick:)];
onem = [CCMenu menuWithItems:one, nil];
onem.positionInPixels = ccp((53 + (106 * 1)),300);
[self addChild:onem];
}
else if(onepos == 6)
{
CCMenuItemImage *one = [CCMenuItemImage itemFromNormalImage:@"one.png" selectedImage:@"onepressed.png"
target:self
selector:@selector(oneclick:)];
onem = [CCMenu menuWithItems:one, nil];
onem.positionInPixels = ccp((53 + (106 * 2)),300);
[self addChild:onem];
}
else if(onepos == 7)
{
CCMenuItemImage *one = [CCMenuItemImage itemFromNormalImage:@"one.png" selectedImage:@"onepressed.png"
target:self
selector:@selector(oneclick:)];
onem = [CCMenu menuWithItems:one, nil];
onem.positionInPixels = ccp(53,180);
[self addChild:onem];
}
else if(onepos == 8)
{
CCMenuItemImage *one = [CCMenuItemImage itemFromNormalImage:@"one.png" selectedImage:@"onepressed.png"
target:self
selector:@selector(oneclick:)];
onem = [CCMenu menuWithItems:one, nil];
onem.positionInPixels = ccp((53 + (106 * 1)),180);
[self addChild:onem];
}
else if(onepos == 9)
{
CCMenuItemImage *one = [CCMenuItemImage itemFromNormalImage:@"one.png" selectedImage:@"onepressed.png"
target:self
selector:@selector(oneclick:)];
onem = [CCMenu menuWithItems:one, nil];
onem.positionInPixels = ccp((53 + (106 * 2)),180);
[self addChild:onem];
}
else if(onepos == 10)
{
CCMenuItemImage *one = [CCMenuItemImage itemFromNormalImage:@"one.png" selectedImage:@"onepressed.png"
target:self
selector:@selector(oneclick:)];
onem = [CCMenu menuWithItems:one, nil];
onem.positionInPixels = ccp((53 + (106 * 1)),60);
[self addChild:onem];
}
}
else
{
[self drawone];
}
}
и у меня есть глобальные переменные:
int positions[] = {1,2,3,4,5,6,7,8,9,10};
int currentclick = 10;
int onepos;
NSTimeInterval starttime;
CCMenu* onem;
CCMenu* twom;
CCMenu* threem;
CCMenu* fourm;
CCMenu* fivem;
CCMenu* sixm;
CCMenu* sevenm;
CCMenu* eightm;
CCMenu* ninem;
CCMenu* tenm;
Опять же, я новичок в Objective-C, поэтому, вероятно, делаю что-то действительно глупое