0

У меня есть ViewController, который начинает число NSTimers. Я добавляю каждый из этих NSTimers в качестве наблюдателя в UIApplicationDidEnterBackgroundNotification, чтобы я мог остановить их, если приложение переходит в фоновый режим. Работает хорошо.Добавить наблюдателей панели UITableViewController bar?

[[NSNotificationCenter defaultCenter] 
addObserver:anotherTimer 
selector:@selector(goBackground) 
name:UIApplicationDidEnterBackgroundNotification 
object:nil]; 

.... 

- (void) goBackground { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    [self invalidate]; 
} 

Вот проблема: Я также подклассы UITableViewController добавить кнопку Bar («I» для получения информации) к каждому из моих ViewControllers. Кнопка «Бар» открывает еще один ViewController, который показывает информацию о приложении. Так же, как когда приложение переходит в фоновый режим, я хочу, чтобы все NSTimers останавливались, когда пользователь удаляет кнопку «Бар».

Есть ли способ сделать наблюдатели NSTimers, когда пользователь удаляет кнопку «Бар» или когда выходят ViewController?

ответ

0

Ответ был намного проще, чем я думал. Правильный способ сделать это - создать новое уведомление с произвольным именем (например, «infoButtonTapped») и добавить все NSTimers в качестве наблюдателя к этому уведомлению. Уведомление вызывает тот же метод, что и уведомление отправляется, когда приложение переходит в фоновом режиме («goBackground»):

[[NSNotificationCenter defaultCenter] 
addObserver:aTimer 
selector:@selector(goBackground) 
name:@"infoButtonTapped" 
object:nil]; 

метод вызывается, когда пользователь вводит строку информации Сообщений кнопки уведомление с тем же именем:

[[NSNotificationCenter defaultCenter] postNotificationName:@"infoButtonTapped" object:self]; 

Затем при нажатии кнопки панели информации будут вызываться все методы goBackground для NSTimers.

Обратите внимание, что я создал категорию для NSTimer, которая включает в себя функции setObservers, removeObservers и goBackground, которые отлично обрабатывают работу уведомлений.

Я хотел бы также отметить, что всякий раз, когда один из NSTimers аннулируется (будь то в goBackground или в другом месте), он сначала должен быть удален в качестве наблюдателя на всех уведомлений:

[aTimer removeObservers]; 
[aTimer invalidate]; 

В противном случае приложение будет падать при одно из этих уведомлений отправлено ...

Смежные вопросы