2015-08-27 2 views
2

У меня есть некоторые проблемы с NSNotificationCenter и didReceiveRemoteNotification. Я хочу открыть свой ViewController, когда получаю новое уведомление от APNS. Внутри тела уведомления у меня есть objectId - это ключ. я пытаюсь открыть мой ViewController в didReceiveRemoteNotification, но он не работает ((NSNotificationCenter и didReceiveRemoteNotification

AppDelegate.m

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
    [[NSNotificationCenter defaultCenter] 
postNotificationName:kDidReceiveRemoteNotification 
object:userInfo]; 
} 

NewsDetailViewController.m

- (void)viewDidLoad { 
[super viewDidLoad]; 
[[NSNotificationCenter defaultCenter] 
addObserver:self 
selector:@selector(didReceiveRemoteNotification:) 
name:kDidReceiveRemoteNotification 
object:nil]; 
} 

- (void)didReceiveRemoteNotification:(NSNotification *)notification 
{ 
NSLog(@"%s %@",__func__,[notification.userInfo description]); 
} 

const.h

#define kDidReceiveRemoteNotification @"UIApplicationDidReceiveRemoteNotification" 

ViewController не загружен. Я не знаю, что делать.

+0

Центр NSNotificationCenter не имеет ничего общего с удаленными уведомлениями. Я предлагаю вам прочитать об этом и о push-уведомлении, поскольку вы, кажется, смешиваете их? Если вы хотите открыть контроллер своего вида, вы можете просто сделать это непосредственно внутри didRecevieRemoteNotification. Я не знаю, почему вы упоминаете ключ objectId, вы нигде не используете его, и не говорите, как вы собираетесь использовать его или для чего он нужен. – Gruntcakes

+0

@MartinH Я пытаюсь открыть контроллер просмотра без NSNotificationCenter. Мой контроллер просмотра открыт, но не загружен - пустое место, но должно быть загружено WebView или не загружено. Панель навигации (((я не знаю, что хочу делать) (( – user2759544

+0

Вы, кажется, ожидаете, что NSNotificationCenter откроет вам контроллер просмотра, у меня нет Идея, из которой вы могли бы получить эту идею ». Я пытаюсь открыть контроллер представления без NSNotificationCenter.« Я думаю, вам стоит начать новый вопрос, показывающий, как вы пытались открыть контроллер представления и начать с него. – Gruntcakes

ответ

2

Ток в образце коды вы прикрепленная является:

  1. При получении толчок уведомления, опубликовать уведомление NSNotificationCenter (нечто совершенно иное, и не связанное с уведомлением толчка).
  2. Когда другой вид загружен (кому-то нужно было загрузить это представление до получения push-уведомления), подпишитесь на это уведомление NSNotificationCenter.
  3. Когда уведомление опубликовано, распечатайте его в журнале.

Мне было трудно понять это из вашего вопроса, но если контроллер просмотра, который вы пытаетесь запустить в результате получения push-уведомления, является NewsDetailViewController, тогда ваш код этого не делает. То, что вы делаете, это распечатка уведомления для журнала (предполагая, что кто-то другой удостоверился, что NewsDetailViewController загружен до получения push-уведомления).

Для того, чтобы загрузить NewsDetailViewController когда уведомление толчок получено, вам не нужно, чтобы отправить уведомление NSNotification

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
    NewsDetailViewController *newsVC = [[NewsDetailViewController alloc] initWithNibName:@"NewsDetailViewController" bundle:nil]; 
    [self.window.rootViewController.view addSubview:newsVC.view]; 
} 

или любой другой логики загрузки, которая работает лучше для вас. Но в текущем коде, который вы отправили, нет связи между получением push-уведомления и загрузкой ViewController.

Надеюсь, это поможет. Удачи!

+0

thanx за помощью, но переменная self.view - AppDelegate не видит, может быть, self.window.rootViewController? – user2759544

+0

Да, вы правы.Я писал это, как если бы это было в UIViewController, а не в AppDelegate. Я отредактировал сообщение с исправлением. –

+0

@ Черт возьми, мое приложение разбилось. «Завершение приложения из-за неотображенного исключения» NSInternalInconsistencyException », причина:« Не удалось загрузить NIB в пакете: «NSBundle», возможно, приложение не видит контроллер просмотра. – user2759544

Смежные вопросы