Селектор NSNotificationCenter не вызывается - PullRequest
6 голосов
/ 08 июля 2010

В моем приложении для 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];
}

Я могу подтвердить, что уведомление публикуется, поскольку «уведомление о публикации» регистрируется на консоли, но «полученное уведомление» никогда не вызывается, то есть уведомление не получено, а селектор не был вызван. Я не могу понять, что вызвало это.

Спасибо

1 Ответ

14 голосов
/ 08 июля 2010

Наиболее вероятная причина в том, что вы на самом деле не звоните addObserver:selector:name:object:. У вас нет строки регистрации там; Вы уверены, что код работает?

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

...