从推送通知收到的 alertView 打开应用程序后冻结

Posted

技术标签:

【中文标题】从推送通知收到的 alertView 打开应用程序后冻结【英文标题】:App freezes after opening it from an alertView received from a push notification 【发布时间】:2015-07-07 05:18:03 【问题描述】:

我已将 APNS 嵌入到我的应用程序中,并导航到一个显示通知详细信息的屏幕。问题是,当单击警报视图中的视图按钮时,应用程序导航到 .xib 文件并冻结。 我能做些什么来解决这个问题? 下面是用于打开 viewController xib 的代码:

RearTableViewController *rearView = [[RearTableViewController alloc]initWithNibName:@"RearTableViewController" bundle:nil];
    DetailsViewController *detailsViewController = [[DetailsViewController alloc]initWithNibName:@"Details" bundle:nil];
    detailsViewController.messageID = [[[NSUserDefaults standardUserDefaults] objectForKey:@"messageId"] intValue];
    UINavigationController *frontNavigationController = [[UINavigationController alloc] initWithRootViewController:detailsViewController];
    UINavigationController *rearNavigationController = [[UINavigationController alloc] initWithRootViewController:rearView];

SWRevealViewController *mainRevealController = [[SWRevealViewController alloc]
                                                initWithRearViewController:rearNavigationController frontViewController:frontNavigationController];

mainRevealController.delegate = self;
self.window.rootViewController = mainRevealController;

【问题讨论】:

应用程序不仅可以在 applicationDidFinishLaunching... 中获取 APNS 消息,如果应用程序启动,那么它将在 ..didReceiveRemoteNotification 中获取 APNS:.. 我不认为在这种情况下更改 rootViewController是个好主意。 我也尝试过展示一个视图控制器。这也不起作用。 【参考方案1】:

这可能会对您有所帮助。

self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
    SplashVC *rootVC = [[SplashVC alloc]initWithNibName:@"SplashVC" bundle:nil];
    UINavigationController *navigation = [[UINavigationController alloc]initWithRootViewController:rootVC];
    [navigation setNavigationBarHidden:YES];
    self.window.rootViewController = navigation;
    [self.window makeKeyAndVisible];

这是我收到推送并显示警报时的代码。如果警报按下按钮之一,那么这将显示我的视图控制器。

LocationViewController *locationVC = [storyboard instantiateViewControllerWithIdentifier:@"LocationVC"];
                                  locationVC.latitude = fLat;
                                  locationVC.longitude = fLong;
                                  [self.navController presentViewController:locationVC animated:YES completion:nil];

【讨论】:

我也试过这个。应用程序仍然冻结,并且仅在从 alertView 导航到时才会发生这种情况。 何时显示警报?当收到推送时显示警报? 不,兄弟。它仍然不起作用。应用程序现在崩溃 你在用故事板吗? SettingsVC *controller = [[SettingsVC alloc]initWithNibName:@"SettingsVC" bundle:nil]; [self.navigationController pushViewController:controller animated:YES]; 你有没有试过这么简单。因为我在我的一个旧项目中使用它\

以上是关于从推送通知收到的 alertView 打开应用程序后冻结的主要内容,如果未能解决你的问题,请参考以下文章

检测是不是在应用未启动且用户未通过它们打开应用时收到推送通知

即使App已关闭,也会收到Android推送通知

Android:点击推送通知不打开应用程序

推送通知不是第一次收到

如何让你的推送通知打开某个视图控制器?

打开 PWA 时收到推送事件时不显示通知