1

我在互联网上搜索了堆栈溢出,但仍然无法解决这个问题。

它是一个选项卡式应用程序模板。

当应用程序未运行并收到推送通知时,我想从中读取 launchOptions 的内容

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions我通过解析 JSON 数据等...

然后我想在故事板上的单独视图上显示它。

我读过一些帖子要做:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; DetailViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"Detail"]; [(UINavigationController*)self.window.rootViewController pushViewController:ivc animated:NO];

但这给了我

*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UITabBarController pushViewController:animated:]:无法识别的选择器发送到实例 0x1c5a0c20”

当应用程序在后台运行并接收来自的推送时

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)notification我打电话[[NSNotificationCenter defaultCenter] postNotificationName:@"receivedPushNotification" object:self];

它告诉当前正在显示的任何视图

detail = [self.storyboard instantiateViewControllerWithIdentifier:@"Detail"]; [self.navigationController pushViewController:detail animated:YES];

效果很好。

问题是应用程序首次启动时没有加载这些视图,因此我需要一种方法将详细视图控制器从 appDelegate 放在用户屏幕上。

谢谢

4

1 回答 1

0

我假设您的故事板设置为“mainstoryboard”(Info.plist 中的关键 UIMainStoryboardFile)。在这种情况下,UIKit 将加载故事板并将其初始视图控制器设置为窗口的根视图控制器,然后将 application:didFinishLaunchingWithOptions: 发送到您的AppDelegate.I 还假设情节提要中的初始视图控制器是导航控制器,您希望在其上推送主视图或登录视图控制器。

您可以向窗口询问其根视图控制器,并向其发送 performSegueWithIdentifier:sender: 消息:

NSString *segueId = success ? @"pushMain" : @"pushLogin";
[self.window.rootViewController performSegueWithIdentifier:segueId sender:self];
于 2014-03-31T09:05:18.443 回答