Ошибка SIGABRT при использовании NavController в PopOverController - PullRequest
1 голос
/ 08 февраля 2012

Ранее я уже писал аналогичный вопрос, но на этот раз я предоставляю некоторый код для анализа.Я создаю PopOverController в моем файле AppDelegate.m и добавляю переменную NavigationController, которую я хочу передать в файл PopOverController.m, чтобы с помощью этого я хотел подтолкнуть другие представления.Вот как я создаю PopOver в AppDelegate.m

- (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 Ответ

1 голос
/ 08 февраля 2012
UINavigationController *navcon = [[UINavigationController alloc] initWithRootViewController:popoverContentController];

Вы пытаетесь установить контроллер поповер в контроллер навигации. Я не думаю, что вы этого хотите.

Чтобы включить навигацию в popover, вы должны сделать это,

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

и инициализируйте контроллер навигации с помощью желаемого viewController, например TableViewController или чего-то еще.

...