2012-02-08 27 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