我在互联网上搜索并堆栈溢出,仍然无法解决这个问题。
这是一个标签式应用程序模板。
当应用未运行且收到推送通知时,我想从
中读取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的用户屏幕上。
由于
答案 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];