Приложение для iPhoneWillResignActive - как уведомить текущий UIView - PullRequest
2 голосов
/ 12 февраля 2012

Я хочу приостановить таймер на игровом экране, когда iPhone заблокирован и т. Д. У меня вопрос, каков наилучший способ уведомления текущего UIView, к которому AppDelegate не имеет прямого доступа?

1 Ответ

3 голосов
/ 12 февраля 2012

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

2) Любой объект (включая представление или контроллер) может независимо прослушивать соответствующее уведомление. Например, в вашем контроллере представления (или в представлении кода, если вы выбираете этот маршрут):

    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(pauseTheTimer:)
                                             name:UIApplicationWillResignActiveNotification
                                           object:nil];

Затем реализуйте pauseTheTimer: метод, который будет обрабатывать уведомление. (Поскольку существует только один объект UIApplication, вы можете использовать nil для объекта, как показано.)

Этот подход прекрасно отделяет делегата вашего приложения от представлений и контроллеров представления.

(О, не забудьте прекратить наблюдение, когда ваш вид выгружен или освобожден. Невыполнение этого требования может привести к сбоям.)

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