Ios N通知中心和DID接收通知

Ios N通知中心和DID接收通知,ios,objective-c,nsnotificationcenter,Ios,Objective C,Nsnotificationcenter,我在NSNotificationCenter和DidReceiveMemotentification方面有一些问题。当我收到来自APN的新通知时,我想打开我的ViewController。体内通知我有objectId-这是关键。 我试图打开我的ViewController进入DidReceiveMemotentification,但它不起作用(( AppDelegate.m - (void)application:(UIApplication *)application didReceiveR

我在NSNotificationCenter和DidReceiveMemotentification方面有一些问题。当我收到来自APN的新通知时,我想打开我的ViewController。体内通知我有objectId-这是关键。 我试图打开我的ViewController进入DidReceiveMemotentification,但它不起作用((

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]);
 }
常数h

#define kDidReceiveRemoteNotification @"UIApplicationDidReceiveRemoteNotification"

ViewController未加载。我不知道该怎么办。

您附加的示例代码的当前流程是:

  • 接收推送通知时,将通知发布到NSNotificationCenter(与推送通知完全不同且不相关的内容)
  • 加载其他视图时(需要有人在收到推送通知之前加载此视图),请订阅此NSNotificationCenter通知
  • 发布通知后,将其打印到日志中
  • 从您的问题中我很难理解这一点,但是如果您在收到推送通知后尝试启动的视图控制器是NewsDetailViewController,那么您的代码不会这样做。您的代码所做的是将通知打印到日志中(假设其他人确保在接收推送通知之前加载了NewsDetailViewController)

    为了在收到推送通知时加载NewsDetailViewController,不需要将通知发布到NSNotification

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    {   
        NewsDetailViewController *newsVC = [[NewsDetailViewController alloc] initWithNibName:@"NewsDetailViewController" bundle:nil];
        [self.window.rootViewController.view addSubview:newsVC.view];
    }
    
    或者任何其他对您更好的加载逻辑。但是在您发布的当前代码中,接收推送通知和加载ViewController之间没有任何联系


    我希望这会有所帮助。祝你好运!

    NSNotificationCenter与远程通知无关。我建议你阅读有关它和推送通知的内容,因为你似乎在混淆它们。如果你想打开视图控制器,那么你可以直接在DidReceiveRemoteNotification中这样做。我不知道你为什么要提到objectId键,您没有在任何地方使用它,也没有说明您打算如何使用它或它的用途。@Martin我尝试在没有NSNotificationCenter的情况下打开view controller。我的view controller已打开但未加载-空白,但必须加载WebView或未加载导航栏(((我不知道要做什么((您似乎期望NSNotificationCenter为您打开视图控制器,我不知道您从何处获得该想法。“我尝试在没有NSNotificationCenter的情况下打开视图控制器。”我想你应该开始一个新的问题,说明你是如何尝试打开视图控制器的,然后从那里开始。@MartinH我认为人们会展示示例代码)thanx需要帮助,但是变量self.view-AppDelegate不可见,可能是self.window.rootViewController?是的,你说得对。我写这篇文章的时候好像它在UIViewController中,而不是在AppDelegate中。我编辑了这篇文章并进行了修复。@Chouch-hm我的应用程序崩溃了。由于未捕获的异常“NSInternalInconsistencyException”,正在终止应用程序,原因:“无法在捆绑包中加载NIB:”NSBundle"可能应用程序看不到视图控制器。您需要一个具有匹配名称的.xib文件,将代码段中的名称更改为项目中的名称,或者只加载没有nib的视图。将加载方法更改为您认为合适的方法,但主要思想是您不需要使用NSNotificationCenter@Chochthanx这是个好主意uestion-当我从appdelegate加载我的视图时,我的导航栏(带按钮等)没有显示,WebView和工具栏中带有文本的主体正在显示并工作,但导航栏没有显示,这是什么?