остановка цикла программирования - PullRequest
0 голосов
/ 11 декабря 2010

Когда мой основной viewController первый раз нажимается, он начинает показывать демо (при повторении) следующим образом:

showingDemo = YES;
[self startDemo];

- (void)startDemo {
    if (showingDemo) {
        [self performSelector:@selector(stepone) withObject:nil afterDelay:1.5f];
        [self performSelector:@selector(steptwo) withObject:nil afterDelay:2.0f];
        [self performSelector:@selector(stepthree) withObject:nil afterDelay:3.8f];
        [self performSelector:@selector(stepfour) withObject:nil afterDelay:4.3f];  
        [self performSelector:@selector(startDemo) withObject:nil afterDelay:5.6f];
    }
}

При повторном нажатии на экран выводится новый ViewController

showingDemo = NO;
[self.view addSubview:newView];

Я думал, что это остановит бесконечный цикл.

Когда пользователь возвращается к моему главному viewController:

[newView.view removeFromSuperview];

И снова нажимает на экран:

showingDemo = YES;
[self startDemo];

При тестировании моего приложения, если я быстро щелкаю назад (до того, как цикл успел закончиться, программа, кажется, дважды проходит цикл - тот, который был ранее, и новый - и, следовательно, все выглядит странно, когда функция 'stepthree' происходит перед 'stepone' и т. д.

Кто-нибудь знает лучший способ ОСТАНОВИТЬ цикл, который я запрограммировал навсегда, чтобы при следующем запуске он не запускался несколькими циклами, думая, что предыдущий цикл еще не закончен?

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

1 Ответ

3 голосов
/ 11 декабря 2010

Когда вы устанавливаете для параметра showDemo значение NO, вызывайте cancelPreviousPerformRequestsWithTarget: объекта NSObject для отмены любых ожидающих запросов на выполнение:

showingDemo = NO;
[NSObject cancelPreviousPerformRequestsWithTarget:self];
[self.view addSubview:newView];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...