Отпустите NSObject и остановите все вызовы метода - PullRequest
0 голосов
/ 17 мая 2009

Итак, мое меню вызывает игру с таким фрагментом кода:

game = [[Game alloc] init];
[self presentModalViewController:memoryTest animated:FALSE];

Затем появляется UIViewController с обратным отсчетом. Игрок может вернуться в меню во время обратного отсчета. Однако, когда я пытаюсь это сделать, отсчет времени продолжается, и в конце концов игра запускается, даже несмотря на то, что UIViewController был закрыт (поэтому UIView исчез) в методе backToMenu.

[self.parentViewController dismissModalViewControllerAnimated:FALSE];

Я пытался освободить игровой объект в методе viewDidAppear меню, но безуспешно. Я думал о том, чтобы иметь значение BOOL для «выхода», чтобы обратный отсчет мог проверить, вышел ли игрок из игры, но должен быть лучший способ освободить объект и остановить все вызовы метода внутри него.

Спасибо за помощь.

Метод CountDown:

- (void)countDown {

    SoundEffect *sound = [[SoundEffect alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"tick" ofType: @"wav"]];
    [sound playAndRelease];

    if(self.countDownStep > 0) {
        feedback.image = [UIImage imageNamed:[NSString stringWithFormat:@"countdown%d.png",self.countDownStep]];
        feedback.hidden = FALSE;

        [self performSelector:@selector(countDown) withObject:nil afterDelay:0.8];
    }

    else {
        [self displayMessage:self.startMessage];
        [self.game performSelector:@selector(start) withObject:nil afterDelay:0.8];
        [self performSelector:@selector(hide) withObject:nil afterDelay:0.8];
    }

    self.countDownStep--;

}

Ответы [ 3 ]

0 голосов
/ 17 мая 2009

Я предполагал, что вы будете использовать что-то вроде NSTimer. На самом деле, это все еще не может быть плохой идеей. NSTimer может обрабатывать ваш метод обратного отсчета каждые 0,8 секунды. Если вы уменьшите значение до 0, ваш отсчет истек. Если ваш вид исчезает, аннулируйте таймер в viewWillDisappear.

0 голосов
/ 18 мая 2009

В viewWillDisappear view-контроллера проверьте, работает ли таймер. Если это так, то просто сделайте это недействительным.

[timerObject invalidate] остановит таймер

0 голосов
/ 17 мая 2009

Как вы справляетесь с обратным отсчетом? Кажется, вы хотите явно аннулировать обратный отсчет в методе viewWillDisappear для упомянутого вами UIViewController.

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