Objective-C - NSTimer все еще активен, когда переключен в другое представление - PullRequest
2 голосов
/ 16 августа 2011

На моем первом контроллере вида запущен таймер, затем я хочу переключиться на другой контроллер вида, а таймер все еще работает в фоновом режиме.

Как мне полностью очистить первый контроллер вида и запустить второй контроллер вида.

SecondViewController *newView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self presentModalViewController:newView animated:NO];
[newView release];

Спасибо за любую помощь!

Ответы [ 2 ]

1 голос
/ 16 августа 2011

Ну, это зависит от того, что вы делаете с видами. Если вы используете UITabBarController или UINavigationController , вы, вероятно, не захотите «очищать» первый контроллер представления при запуске второго. Вы хотите, чтобы контроллеры справились с этим. Поэтому, если вы используете любой из этих контроллеров, я бы предложил приостановить таймер, когда первое представление выходит из поля зрения, используя viewWillDisappear: метод UIViewController: *1006* метод.

0 голосов
/ 16 августа 2011

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

Что вам нужно сделать, это, возможно, переместить таймер к вашему делегату приложения или к одноэлементному классу.Затем дайте себе пару способов запустить / остановить / приостановить его по желанию.

Или вы можете просто приостановить или остановить таймер при вызове viewDidLoad второго представления, затем возобновить илиперезапустите его на viewDidUnload .

Вы можете получить родительское представление с помощью свойства parentViewController второго контроллера представления.

...