来自 appDelegate 的 pushViewController - 问题

Posted

技术标签:

【中文标题】来自 appDelegate 的 pushViewController - 问题【英文标题】:pushViewController from appDelegate - Problems 【发布时间】:2013-02-04 23:10:23 【问题描述】:

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

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

当应用未运行并收到推送通知时,我想从中读取 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】:

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

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

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

【讨论】:

以上是关于来自 appDelegate 的 pushViewController - 问题的主要内容,如果未能解决你的问题,请参考以下文章

故事板中 didselectrowatindexpath 上的 Pushview

ios 将 TextView 从 PushView 传递给 PresentingView

PushView Navigation 无需重新初始化 UIViewController 中的对象

来自 appDelegate 的 javascript 调用:phonegap iOS

来自 AppDelegate 的 PresentViewController 句柄ActionWithIdentifier

SWRevealViewController 不显示来自 Appdelegate 的状态栏推送