2012-02-08 61 views
1

我以前發佈過類似的問題,但是這次我提供了一些分析代碼。我在我的AppDelegate.m文件中創建PopOverController,我添加了一個NavigationController變量,我想將它傳遞給PopOverController.m文件,以便使用該變量來推送其他視圖。這裏是我如何AppDelegate.m在PopOverController中使用NavController的SIGABRT錯誤

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
    if([viewController isKindOfClass:[SecondViewController class]]){ 
     NSInteger index = [[self tabBarController] selectedIndex]; 
     CGRect buttonFrame = [[[[[self tabBarController] tabBar] subviews] objectAtIndex:index+1] frame]; 

     PopOverViewController *popoverContentController = [[PopOverViewController alloc]init]; 

     UINavigationController *navcon = [[UINavigationController alloc]initWithRootViewController:popoverContentController]; 

     popoverContentController.contentSizeForViewInPopover = CGSizeMake(250, 85); 
     popover = [[UIPopoverController alloc]initWithContentViewController:popoverContentController];    

     NSLog(@"X:%f Y:%f",buttonFrame.origin.x,buttonFrame.origin.y); 

     [popover presentPopoverFromRect:buttonFrame inView:self.tabBarController.tabBar permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES]; 

    } 
} 

創建酥料餅在我PopOverController.m我試圖使用NavigationController選擇的看法是這樣的:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
    sendFeedback *sendEmailViewController = [[sendFeedback alloc]initWithNibName:@"sendFeedback" bundle:nil]; 
    downLoad *downloadFilelViewController = [[downLoad alloc]initWithNibName:@"downLoad" bundle:nil]; 

    if (indexPath.row == 0) 
     [self.navigationController pushViewController:sendEmailViewController animated:YES]; 
    else 
     [self.navigationController pushViewController:downloadFilelViewController animated:YES]; 
} 

但是,當我點擊我的TabBar項目爲酥料餅我得到這個消息SIGABRT:

終止應用程序由於未捕獲的異常「NSGenericException」,理由是:「內容視圖控制器參數必須是與其相關的訴根控制器層次結構「。

出現這種情況的任何原因?有我在我的代碼中犯了一個錯誤的地方嗎?

回答

1
UINavigationController *navcon = [[UINavigationController alloc] initWithRootViewController:popoverContentController]; 

你試圖把一個popover控制器放在導航控制器中。我不認爲你想要這個。

爲了把導航酥料餅,你應該這樣做,

UINavigationController *navcon = [[UINavigationController alloc] initWithRootViewController:myViewController]; 
popoverContentController = [UIPopoverController initWithContentViewController:navcon] 

和init你想要的的viewController,像TableViewController或別的東西導航控制器。

+0

嗨,謝謝你的回答,我還剩下一個問題。這是關於viewController,我需要初始化,我有2個viewControllers即FirstVC和SecondVC,我有兩個TabBar項目這兩個viewControllers。當我點擊第二個TabBar項目時,彈出PopOver,並在該PopOver我有一個表視圖,作爲兩個項目,當點擊導致另外2個ViewControllers取決於rowSelected。所以我想從我的PopOver中展示這個VC。那麼我應該用NavigationController初始化哪個ViewController。如果你能回答會有幫助 – 125369 2012-02-08 10:01:22