Ios 从自定义委托调用self.navigationController将导致null

Ios 从自定义委托调用self.navigationController将导致null,ios,xcode,uinavigationcontroller,Ios,Xcode,Uinavigationcontroller,我有一个自定义的UIScrollView,我在单击单元格的页脚时创建了一个自定义的delegate,我想在这种情况下启动一个ViewController - (void)cellFooterViewTapped:(NSInteger)index { ProfiliViewController *profiliView = [[ProfiliViewController alloc]init]; [self.navigationController pushViewController:profi

我有一个自定义的
UIScrollView
,我在单击单元格的页脚时创建了一个自定义的
delegate
,我想在这种情况下启动一个
ViewController

- (void)cellFooterViewTapped:(NSInteger)index
{
ProfiliViewController *profiliView = [[ProfiliViewController alloc]init];
[self.navigationController pushViewController:profiliView animated:YES];
}
已正确传递单击单元格的索引,这意味着正在调用该方法。 只是
navigationController
不工作,我还记录了它并打印了null。 可能是什么?我在主
ViewController
上有4个其他按钮,它们的代码相同,并且不为空

这是我的didFinishLaunchingWithOptions

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
ViewController *_switchviewcontroller = [[ViewController alloc]init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:_switchviewcontroller];
[self.window addSubview:navController.view];

[self.window makeKeyAndVisible];

[[UISwitch appearance] setOnTintColor:[UIColor colorWithRed:0.204 green:0.286 blue:0.368 alpha:1.0]];
return YES;
// Override point for customization after application launch.
}
此外,NavigationController和主ViewController也在情节提要中声明。
其他一切都是代码。

您可能有非
navigationController

您应该在
navigationController的
堆栈中推送
self
,这样您就可以拥有
navigationController

委托方法
-(void)cellFooterViewTapped:(NSInteger)索引
应位于
UIViewController
中,以便您可以在其导航控制器中推送新的
UIViewController


此外,当前的
UIViewController
应推送/添加到现有导航控制器堆栈中。如果
UIViewController
尚未添加到
navigationController
中,它将为空。

您的故事板结构应如下图所示。导航控制器必须是您的根控制器。并连接mainview控制器作为导航控制器的根,如图所示。然后你可以按任何控制器。而且你不必在appDidFinishLaunching中编写任何代码,因为故事板中的一切都是连接的


我找到了一个解决方案,使用此代码您无法在任何地方获得navigationController

UINavigationController *nav = [[[UIApplication sharedApplication] delegate] window].rootViewController

如果您的意思是
[self.navigationController-pushViewController:self-animated:YES]我尝试过,但多次推送同一视图控制器实例时出现此错误不受支持否。我的意思是viewController(self)是否在导航堆栈中。如果viewController(self)现在位于导航堆栈中,则您的问题不会发生,因此,我只想确保您曾经将viewController(self)推到过哪里。您的写入方式存在另一个问题,在启动应用程序时可能会导致一些警告。ViewController*_switchviewcontroller=[[ViewController alloc]init];UINavigationController*navController=[[UINavigationController alloc]initWithRootViewController:_switchviewcontroller];[self.window addSubview:navController.view];您应该使用self.window.rootViewController=navController而不是[self.window addSubview:navController.view];您能显示您的
appdidfishLaunching
代码吗?所以我们可以知道你的导航堆栈。我编辑了这篇文章。请检查我做了什么,现在当我打开appagain时,我得到了一个空白屏幕。我忘了提到,我的NavigationController和主ViewController在情节提要上声明了-u-因为其他人启动了该项目。@Elgert oh ok。你应该补充一点,在你的问题中你正在使用故事板。这几乎和我的一样,一个导航控制器和一个主视图控制器,从那里我只推代码。但只有在该委托上,
self.navigationController
为空。是否从
appDidFinishLaunching
中删除代码?为什么要添加[self.window addSubview:navController.view]
-(void)cellFooterViewTapped:(NSInteger)index
实际上在我的主
UIViewController
上,它是同一个类,我有4个其他按钮,可以毫无问题地按不同的ViewController