从 App Delegate 调用时,PushViewController 不起作用

Posted

技术标签:

【中文标题】从 App Delegate 调用时,PushViewController 不起作用【英文标题】:PushViewController does not work when called from App Delegate 【发布时间】:2012-01-03 17:39:59 【问题描述】:

我有一个基于标签栏的应用程序。当应用程序处于活动状态时,我希望它转到第二个标签栏(SecondViewController),然后打开 DetailViewController。

这是我的做法:

AppDelegate.m

- (void)applicationDidBecomeActive:(UIApplication *)application 
    self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:1];

    SecondViewController *secondView = [[SecondViewController alloc] init];
    [secondView openDetailView];
    [secondView release];

SecondViewController.m

-(void)openDetailView
     NSLog(@"open detail view");

     DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
            [[self navigationController] pushViewController:detailViewController animated:YES];

openDetailView() 确实运行(因为我看到 nslog 工作),但 DetailView 没有被推送?我知道代码有效,因为我在 IBAction 中有相同的代码,它确实推送了 detailView。该问题与从 AppDelegate(或切换选项卡)调用它有关。

那么,当我从 App Delegate 调用视图时,为什么视图没有被推送?任何帮助是极大的赞赏。

【问题讨论】:

使用以下代码检查您是否正在获取导航控制器的值 - UINavigationController navController = [(MyAppDelegate)[[UIApplication sharedApplication] delegate] navigationController];还要确保您有一些 IBOutlet,然后它们连接正确。 [self navigationController] 很可能是 nil,因为 secondViewController 没有分配给任何 navigationController(至少从您向我们展示的代码来看。 【参考方案1】:

您将 detailViewController 推送到 secondView 的 Navigation-Stack,但 secondView 不存在。

试试这个...

SecondViewController *secondView ...

[self.tabBarController pushViewController:secondView animated:YES];  <==

[secondView openDetailView];

【讨论】:

以上是关于从 App Delegate 调用时,PushViewController 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

从 App Delegate (Swift) 调用 ViewControllers 方法或 Segue

在另一个类的 App Delegate 调用方法中

Cocoa:从另一个类调用 App Delegate 方法

可以在 App Delegate 中调用 Web 服务吗?

iOS 如何告诉 App Delegate 从当前视图呈现新视图

从 Xcode 11 更新到 12 后的 App Delegate/Scene Delegate 和 Firebase 问题 [关闭]