2013-04-09 5 views
-1

У меня есть две вкладки на UITabBarController, и я зарегистрировал оба с NSNotificationCenter, моя проблема в том, что я не получаю уведомления на скрытой вкладке (т. Е. Ее не называется viewDidAppear:). Я считаю, что контроллеры не на экране (т. Е. Скрытые) не отвечают на NSNotifications. Я могу сделать что-то по-другому, но это не проблема, но я просто хочу проверить, почему скрытая вкладка не получает уведомление в случае, если я упустил что-то еще, и он действительно должен работать ...Скрытые представления отвечают на NSNotifications?

EDIT:

@Fab1n указал мне в правильном направлении, я ошибочно использовал viewWillDisappear:, чтобы удалить наблюдателя, поэтому, когда исчезло представление, больше не было прослушивания уведомлений. Я перевещу его на dealloc.

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 
    [notificationCenter removeObserver:self]; 
} 

Изменен:

- (void)dealloc { 
     NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 
     [notificationCenter removeObserver:self]; 
} 

Очень высокую оценку.

+0

Когда вы регистрируетесь и отмените регистрацию для уведомлений? Можете ли вы показать этот код? – jrturton

+0

Я бы перефразировал вопрос «Не исчезли ли контроллеры представлений реагировать на NSNotifications»? – voromax

+0

use viewWillAppear – Rajneesh071

ответ

1

Чтобы оставаться в безопасности: Зарегистрируйте NSNotification в -init или (с IB) -initWithNibName:

Контроллер из UITabbarController инициализируется с init при установке controllers свойства UITabbarController.

viewWillAppear и viewDidAppear вызываются каждый раз, когда вы делаете один из контроллеров видимым, нажимая на значок табуляции.

Решение:

  1. зарегистрировать NSNotification Переопределелив -init в каждой из ваших «sub' контроллеров
  2. незарегистрированный уведомления в -dealloc (не называют [super dealloc] с АРК !!!)

Теперь все работает нормально!

+0

Спасибо за полезный пост, очень оцененный. – fuzzygoat

1

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

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