SIGABRT在PopOverController中使用NavController时出错

时间:2012-02-08 09:41:59

标签: objective-c ipad ios5 xcode4.2

我之前发过类似的问题,但这次我提供了一些分析代码。我正在我的AppDelegate.m文件中创建PopOverController,我正在添加一个NavigationController变量,我想传递给PopOverController.m文件,以便使用我想要推送其他视图。以下是我在AppDelegate.m中创建PopOver的方法

- (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];
}

但是当我点击PopOver的TabBar项目时,我收到此SIGABRT消息:

  

由于未捕获的异常'NSGenericException'而终止应用程序,原因是:'内容视图控制器参数必须是其关联的视图控制器层次结构的根。'

出现这种情况的原因是什么?我的代码中是否存在错误?

1 个答案:

答案 0 :(得分:1)

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

您正试图将弹出式控制器放在导航控制器中。我认为你不想要这个。

要将导航设置为popover,您应该这样做,

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

并使用您想要的viewController初始化导航控制器,如TableViewController或其他。