ios - NSNotificationCenter 和 didReceiveRemoteNotification

标签 ios objective-c nsnotificationcenter

我在使用 NSNotificationCenter 和 didReceiveRemoteNotification 时遇到一些问题。当我收到来自 APNS 的新通知时,我想打开我的 ViewController。在正文通知中我有 objectId - 这是关键。 我尝试将 ViewController 打开到 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 未加载。我不知道该怎么办。

最佳答案

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

  1. 收到推送通知时,将通知发布到 NSNotificationCenter(与推送通知完全不同且无关的内容)。
  2. 当另一个 View 加载时(有人需要在收到推送通知之前加载此 View ),订阅此 NSNotificationCenter 通知。
  3. 发布通知后,将其打印到日志中。

我很难从你的问题中理解这一点,但如果你在收到推送通知后尝试启动的 View Controller 是 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 之间没有任何联系。

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

关于ios - NSNotificationCenter 和 didReceiveRemoteNotification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32260282/

相关文章:

ios - 如何像 SKNode 一样编辑 NSArray 对象

ios - 在 deinit 中的 NotificationCenter.default.removeObserver(self),为什么 deinit 它甚至被调用?

ios - NSNotificationCenter 的帖子导致 "EXC_BAD_ACCESS"异常

iphone - 在表格单元格中输入文本数据,每个单元格中没有 UITextField

objective-c - iOS 的 objective-c/cocoa 中存在哪些方法系列?

iphone - 如何让用户的 iPhone 显示屏保持开启状态?

objective-c - 在 UITableView 中显示多个自定义单元格?

ios - observeValueForKeyPath : message sent to deallocated instance

ios - 如何重构UITableViewCell配置代码?

iphone - UIWebView loadRequest 导致模拟器崩溃