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