在接收推送通知时,点击事件应用程序在导航后崩溃
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 推送通知时修复应用程序崩溃