来自appDelegate的pushViewController - 问题

时间:2013-02-04 23:10:24

标签: storyboard pushviewcontroller appdelegate tabbed

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

这是一个标签式应用程序模板。

当应用未运行且收到推送通知时,我想从

中读取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的用户屏幕上。

由于

1 个答案:

答案 0 :(得分:0)

我假设您的故事板被设置为"主题板"(您的Info.plist中的关键UIMainStoryboardFile)。在这种情况下,UIKit将加载故事板并将其初始viewcontroller设置为您的窗口' s根视图控制器在发送应用程序之前:didFinishLaunchingWithOptions:到您的AppDelegate.I还假设故事板中的初始视图控制器是导航控制器,您要在其上推送主视图或loginview控制器。

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

NSString *segueId = success ? @"pushMain" : @"pushLogin";
[self.window.rootViewController performSegueWithIdentifier:segueId sender:self];