3

我有一個基於標籤欄的應用程序。當應用程序變爲活動狀態時,我希望它進入第二個標籤欄(SecondViewController),然後打開DetailViewController。從App Delegate調用PushViewController不起作用

這裏是我如何做它:

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調用它(或切換標籤)有關。

那麼爲什麼當我從應用程序委託調用它時,視圖不會被推送呢?任何幫助是極大的讚賞。

+0

檢查,如果你是使用下面的代碼獲取瀏覽器的價值 - UINavigationController的* navController = [(MyAppDelegate *)[[UIApplication的sharedApplication]委託] navigationController]。還要確保你是否有一些IBOutlet,然後這些連接正確。 – rishi 2012-01-03 17:49:54

+1

'[self navigationController]'最有可能是'nil',因爲secondViewController沒有分配給任何的navigationController(至少從你給我們展示的代碼中)。 – Till 2012-01-03 17:51:51

+0

offtopic:你使用ARC嗎? – CarlJ 2012-05-30 12:58:37

回答

0

您將detailViewController推送到secondView的Navigation-Stack,但secondView無處可用。

嘗試......

SecondViewController *secondView ... 

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

[secondView openDetailView];