NsnotificeCenter Selector не вызывается
-
02-10-2019 - |
Вопрос
В моем приложении iPad в одном классе я регистрирую для уведомления:
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(selectedList:) name:@"TTSelectedList" object:nil];
Мой selectedList:
Метод выглядит так:
- (void)selectedList:(NSNotification*)notification
{
NSLog(@"received notification");
}
Затем в другом классе ( UITableViewController
) Я публикую, что уведомление, когда ряд выбран:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"posting notification");
[[NSNotificationCenter defaultCenter] postNotificationName:@"TTSelectedList" object:nil];
}
Я могу подтвердить, что уведомление публикуется, потому что «публикация уведомления» регистрируется в консоли, но «полученное уведомление» никогда не вызывается, что означает, что уведомление не получено, и селектор не был вызван. Я не могу понять, что это вызывает.
Спасибо
Решение
Наиболее вероятной причиной в том, что вы на самом деле не звонили addObserver:selector:name:object:
. Отказ У вас нет линии журнала там; Вы уверены, что код работает?
Второй скорее всего, вы вызываете removeObserver:
до того, как уведомление будет опубликовано. Это чаще всего в dealloc
(который должен всегда вызов removeObserver
Если вы когда-нибудь не наблюдали). Ошибка здесь заключалась в том, что ваш объект наблюдения до уведомления до уведомления.