在接收推送通知时,点击事件应用程序在导航后崩溃

Posted

技术标签:

【中文标题】在接收推送通知时,点击事件应用程序在导航后崩溃【英文标题】:On click events app crashed after navigation of a segue when receiving push notification 【发布时间】:2015-08-17 15:20:19 【问题描述】:

我的申请快完成​​了,现在我正在处理推送通知。我能够成功接收推送通知,不幸的是我无法在 Appdelegate 中执行 segue。基本上我有两个基本屏幕 1.login 2.Tabbar 控制器我正在应用程序委托中处理这个,如下所示。

UIStoryboard* appStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

if (![self connect])

    UINavigationController *home=[appStoryboard instantiateViewControllerWithIdentifier:@"loginScreen"];
    self.window.rootViewController=home;

else

    //TabbarHome
    UITabBarController *home=[appStoryboard instantiateViewControllerWithIdentifier:@"TabbarHome"];
    //pushNotificationSeague

    self.window.rootViewController=home;

当我收到通知时,我尝试使用 Storyboard ID 进行推送,例如

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
NotificationViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"MyNotification"];
[[[[UIApplication sharedApplication]delegate]window]addSubview:controller.view];
[self.navigationController pushViewController:controller animated:YES];

现在导航完成了。但是 Click 事件正在使应用程序崩溃。我发现的原因是下面的行,没有这行代码应用程序将无法导航。如果我们使用下面的代码,我猜是内存分配问题。

 [[[[UIApplication sharedApplication]delegate]window]addSubview:controller.view];

请帮我解决问题。为什么 NotificationViewController 中的操作会导致崩溃。崩溃报告是

 [NotificationViewController performSelector:withObject:withObject:]: message sent to deallocated instance 0x7ffdc60a8890

【问题讨论】:

【参考方案1】:

不要将 addSubview 添加到窗口。

推送 viewController 并将其添加到窗口子视图是没有意义的。只需删除以下行

[[[[UIApplication sharedApplication]delegate]window]addSubview:controller.view];

最后应该是

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
NotificationViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"MyNotification"];

[self.navigationController pushViewController:controller animated:YES];

【讨论】:

推送没有发生。我想我们需要处理 segue 标识符。因为另一个视图控制器已经加载了 检查 navigationController 对象是否为 nil。如果没有从窗口rootviewcontroller获取navigationController对象

以上是关于在接收推送通知时,点击事件应用程序在导航后崩溃的主要内容,如果未能解决你的问题,请参考以下文章

应用程序被杀死时点击推送通知后应用程序崩溃

如何在接收基于 Flutter 构建的 FCM 推送通知时修复应用程序崩溃

当应用程序被终止状态时,点击推送通知后无法导航到 ViewController

MFP 应用程序在应用程序未运行时在推送通知期间点击时崩溃

WatchOS 3 在收到推送通知时崩溃

由于推送通知点击而启动的应用程序