NSNotificationCenter не работает? - PullRequest
0 голосов
/ 26 февраля 2012

Как я уже сказал, я использую NSNotificationCenter.

на класс A (наблюдатель) в методе init, который у меня есть:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getSensorsData:) name:@"HotSpotTouched" object:nil];

classB у меня есть:

//FILL NSDICTIONARY WITH DATA
    [dict setObject:@"SPOT1" forKey:[array objectAtIndex:0]];
    [dict setObject:@"SPOT2" forKey:[array objectAtIndex:1]];
    [dict setObject:@"SPOT3" forKey:[array objectAtIndex:2]];
    [dict setObject:@"SPOT4" forKey:[array objectAtIndex:3]];
    [dict setObject:@"SPOT5" forKey:[array objectAtIndex:4]];

    [[NSNotificationCenter defaultCenter] postNotificationName:@"HotSpotTouched" object:dict];

функция в классе A getSensorsData не вызывается.

что здесь не так ??

спасибо!

Ответы [ 3 ]

3 голосов
/ 26 февраля 2012

Звонки в центр уведомлений выглядят правильно. Я подозреваю, что проблема связана с жизненным циклом объекта А. Вы говорите, что регистрируетесь для уведомления в методе init. Правильно ли вы присвоили self?:

-(id)init
{
    //self does not have a meaningful value prior to the call to [super init]
    self = [super init];
    if (self != nil)
    {
        //ensure addObserver is called in the if code block
    }
    return self;
}

Кроме того, хорошей практикой является использование констант для имен уведомлений, поскольку они смягчают опечатки. См. Константы в Задаче C .

3 голосов
/ 26 февраля 2012

Вы передаете dict как notificationSender при публикации уведомления и nil при добавлении наблюдателя. Таким образом, ваше уведомление будет отфильтровано из-за несоответствия отправителей.

Обновление:
Как отметил Джоерик в комментариях, пропуск нуля при добавлении наблюдателя отключит фильтрацию отправителей. Так что это не проблема здесь.

Я только что создал небольшой пример проекта, и для меня доставляются уведомления.

@ Rant: Если вы хотите передать произвольные данные вместе с уведомлением, вы должны использовать словарь userInfo (как указано Сирилом в комментарии).

0 голосов
/ 27 февраля 2012

проблема решена:

если вы передаете нулевой аргумент, наблюдатель не получает вызов!

мой NSDictionary аргумент был нулевым (потому что причиная до сих пор не знаю), поэтому звонок не сработал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...