2014-10-22 2 views
0

Привет, я пытаюсь использовать центр NSNotification в своем приложении. Метод выбора не вызывается из кода. Я нашел похожие вопросы на этом сайте, например this, но все же я не могу разрешить ошибка.Метод выбора NSNotificationCenter не называется

я отправляю уведомление AppDelegate сделал закончить запуск, как: [[NSNotificationCenter defaultCenter] postNotificationName:@"ualert" object:self userInfo:userDict];

добавление наблюдателя в одном из контроллера представления как:

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

мой метод селектор:

- (void)remoteNotificationReceived:(NSNotification *)notification 
    { 
     NSLog(@"Notification: %@", notification.userInfo); 

    } 

удаление наблюдателя как:

- (void)dealloc 
    { 
     [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    } 
+0

Вы уверены, что лет отправляете свое уведомление ПОСЛЕ того, что зарегистрировались? Можете ли вы вставить свой законченный способ запуска? – jfgrang

+0

Вы отправляете уведомление перед регистрацией в центр уведомлений –

+0

Спасибо @jfgrang. Теперь я понял эту концепцию. Сначала я должен зарегистрироваться в уведомлении, а затем опубликовать его. Но я работаю над уведомлениями Apple о push. Я получаю данные пользовательских уведомлений в Appdelegate. Я хотел бы поделиться данными уведомления со всеми частями приложения. Итак, как применить эту концепцию NSNotificationcenter в этом сценарии? – hemanth

ответ

1

Вы отправляете ualert в applicationDidFinishLaunching, что обязательно произойдет до загрузки контроллера вашего вида (и, следовательно, перед добавлением наблюдателя для уведомления).

+0

Спасибо @ keller.Я работаю над уведомлениями Apple о push. Я получаю данные пользовательских уведомлений в Appdelegate. Я хотел бы поделиться данными уведомления со всеми частями приложения. Итак, как я могу применить эту концепцию NSNotificationcenter в этом сценарии? – hemanth

+0

Если ваше приложение работает на переднем плане, вы можете использовать 'application: didReceiveRemoteNotification:' и отправить 'NSNotification' так, как вы описали в своем вопросе. Однако, если вам нужна специальная обработка при запуске (помимо простого открытия приложения или выполнения операции, которая может быть полностью выполнена в AppDelegate, например, показе UIAlertView), это немного сложнее. Один из методов заключается в том, чтобы удерживать ссылку на применимые объекты из полезной нагрузки push в AppDelegate и проверять наличие этих объектов после загрузки контроллера. – Keller

+0

Да @keller. Я могу получить доступ к объектам push pushload в одном из моих контроллеров представления. Но я хотел бы знать лучший программный подход для этого, например, делегирование протокола, центр уведомлений, общие экземпляры ..etc. – hemanth