来自 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