Ios TabBarController上的TableViewController中的self.navigationController为(null)

Ios TabBarController上的TableViewController中的self.navigationController为(null),ios,objective-c,Ios,Objective C,我正在尝试在iOS中创建一个小应用程序。在登录页面之后,我有一个tabbar控制器,其中的第一个选项卡是TableViewController。在didSelectRowAtIndexPath中,我试图为每个选定行推送一个视图控制器。使用NSLog打印时,同一视图控制器但self.navigationController为(null),并且无法推送视图控制器。救命 以下是示例代码: - (void)tableView:(UITableView *)tableView didSelectRowAt

我正在尝试在iOS中创建一个小应用程序。在登录页面之后,我有一个tabbar控制器,其中的第一个选项卡是TableViewController。在didSelectRowAtIndexPath中,我试图为每个选定行推送一个视图控制器。使用NSLog打印时,同一视图控制器但self.navigationController为(null),并且无法推送视图控制器。救命

以下是示例代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here, for example:
    // Create the next view controller.
    PlayerDetailsViewController *detailViewController = [[PlayerDetailsViewController alloc] initWithNibName:@"PlayerDetailsViewController" bundle:nil];
    detailViewController.myImg.image=[UIImage imageNamed:[self.arrNames objectAtIndex:indexPath.row]];
    detailViewController.name.text=[self.names objectAtIndex:indexPath.row];
    detailViewController.year.text=[self.draft objectAtIndex:indexPath.row];
    detailViewController.height.text=[self.height objectAtIndex:indexPath.row];
    detailViewController.weight.text=[self.weight objectAtIndex:indexPath.row];
    detailViewController.pro.text=[self.pro objectAtIndex:indexPath.row];
    detailViewController.ppg.text=[self.ppg objectAtIndex:indexPath.row];
    detailViewController.apg.text=[self.apg objectAtIndex:indexPath.row];
    detailViewController.rpg.text=[self.rpg objectAtIndex:indexPath.row];
    NSLog(@"%@",self.navigationController);


    [self.navigationController pushViewController:detailViewController animated:YES];

}

更新:我让navigationController工作,但现在,推送视图(PlayerDetails)中的数据为空白

您没有将firstViewController嵌套在UINavigationController中是错误的

[tabVC setViewControllers:[vc1,vc2,nil]];//tabVC = UITabViewController
因此,我猜在创建UITabViewController时,您的代码将是这样的

[tabVC setViewControllers:[vc1,vc2,nil]];//tabVC = UITabViewController
它需要像下面这样改变

UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc1];
[tabVC setViewControllers:[nav,vc2,nil]];

假设
UITabBarController
的实例是
tabVC
,而
UITableViewController
的实例是
tableVC

UINavigationController *nav = [[UINavigationController alloc initWithRootViewController:tabVC];


两者都可以解决您的问题。

响应程序层次结构上没有
UINavigationController
。将您
UITabBarController
TableViewController
设置为UINavigationController的rootViewController。我可以知道如何做到这一点吗?我必须在TableViewController的didSelectRowAtIndexPath中使用nan变量吗?不,您尝试执行的是UITableViewController->UITableViewController->PlayerDetailsViewController,这是错误的。实际上,您需要做的是UITabViewController->UINavigationController->UITableViewController->PlayerDetailsViewControllerOkay。它可以工作,但是现在我发送到detailViewController的数据丢失了。我的意思是,当我使用presentViewController时,我可以将值设置为detailViewController,现在,我得到一个空白显示。这与您当前的问题无关,您更愿意发布另一个问题