Делегат приложения - выгрузить View Controller - PullRequest
0 голосов
/ 27 октября 2010

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

У меня есть все эти функциональные возможности, я фиксирую все времена запуска и остановки и после повторного входа в контроллер представления секундомера я вычисляю разницу. Все работает прекрасно. Когда я проводил дополнительное тестирование, я понял, что не принял во внимание переход iPhone в спящий режим.

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

-(void)applicationWillResignActive:(UIApplication *)application

Как выгрузить контроллер представления секундомера из моего делегата приложения?

---- ОБНОВЛЕНИЕ ----

kpower, спасибо за ваш отзыв. Я реализовал следующий код:

В моем приложении-делегате:

- (void)applicationWillResignActive:(UIApplication *)application
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"AppIsAsleep" object:nil];
}

В моем контроллере представления у меня есть следующее:

-(void)viewDidLoad 
{   
    // Add Observer.
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewDidUnload:) name:@"AppIsAsleep" object:nil];
}

- (void)viewDidUnload {
    //Remove the Observer.
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"AppIsAsleep" object:nil];
}

Когда телефон переходит в режим сна, он фактически закрывает приложение, я что-то не так делаю?

С уважением, Стивен

1 Ответ

1 голос
/ 27 октября 2010

Вы можете использовать механизм уведомлений. Это позволяет вам выгрузить контроллер представления из другого места (не из AppDelegate) в этом случае.

Например, в методе viewDidLoad вашего контроллера представления вы добавляете наблюдателя (не забудьте удалить его в viewDidUnload), а в applicationWillResignActive: методе AppDelegate вы просто отправляете уведомление. Вот и все.

& Дарр; Обновите здесь & darr;

Когда вы получаете уведомление - вы должны сами управлять удалением контроллера вида. И вызов viewDidUnload здесь не является решением, потому что этот метод вызывается после того, как контроллер представления уже выгружен и не вызывает удаление.

как удалить? Зависит от того, как был добавлен контроллер представления (например, popViewControllerAnimated для UINavigationController). Основная идея здесь состоит в том, чтобы сделать количество сохраняемых объектов равным 0 (как вы знаете, в этом случае объект будет уничтожен), поэтому вы должны отправить сообщение об освобождении необходимое количество раз.

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