Ios 当UINavigationController通过故事板以模式呈现时,它';s rootViewController与它没有连接

Ios 当UINavigationController通过故事板以模式呈现时,它';s rootViewController与它没有连接,ios,uistoryboard,Ios,Uistoryboard,我的故事板如下所示: 第一部分工作得很好,问题是当我使用“测试模式”按钮以模式方式显示第二个NavigationController时,它已正确设置为具有rootViewController-未建立连接 也就是说,我知道UINavigationController在那里(从UIWindow的rootViewController开始查询所有控制器),我的控制器也被加载,但navigationController为nil,parentViewController为nil-我无法访问UINaviga

我的故事板如下所示:

第一部分工作得很好,问题是当我使用“测试模式”按钮以模式方式显示第二个NavigationController时,它已正确设置为具有rootViewController-未建立连接

也就是说,我知道UINavigationController在那里(从UIWindow的rootViewController开始查询所有控制器),我的控制器也被加载,但navigationController为nil,parentViewController为nil-我无法访问UINavigationController(因此无法自定义顶部工具栏)


如果我在第二个UINavigationController上检查“Is Initial View Controller”,它会工作(但显然这不是我想要的)。我相信这可能是一个UIKit错误。还是我做错了?

是否正确实施了prepareForSegue方法? 这就是我在应用程序中实现prepareForSegue方法的方式

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"yourConnectionName"]) {
UINavigationController *navController = segue.destinationController;
YourViewControllerClass *controller = (YourViewControllerClass *)navController.topViewController;
controller.delegate = self;
}
}

您是否正确实施了prepareForSegue方法? 这就是我在应用程序中实现prepareForSegue方法的方式

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"yourConnectionName"]) {
UINavigationController *navController = segue.destinationController;
YourViewControllerClass *controller = (YourViewControllerClass *)navController.topViewController;
controller.delegate = self;
}
}

我终于找到了这个


我没有在我的init中调用
[super initWithCoder:decoder]
。这导致一些UIViewController变量未初始化。改变后,它就像一个符咒。

我终于找到了这个


我没有在我的init中调用
[super initWithCoder:decoder]
。这导致一些UIViewController变量未初始化。改变后,它就像一个符咒。

嗨,我是一个iOS初学者,但我在Twitter上回复了你,因为它听起来像我在应用程序中做的事情。我检查了您的用例,您是对的,第二个导航控制器navigationController为null。但我认为这是故意的,因为它本身就是一个导航控制器。如果它有它的navigationController,那就意味着它包含在另一个导航控制器中,因此有两个工具栏。但在我复制的用例中,self.navigationBar就在那里,可以进行自定义。当我推一个UINavigationController时,我推它的rootViewController,这只是在包装。因此,我当然尝试访问viewController中的navigationController,而不是UINavigationController.self中的navigationController。在我的复制中,红色的navigationController被正确设置为绿色的:我在我的机器上复制了用例并上载了项目:。当我进入模态导航控制器时,它会正确记录“。嗨,我是一个iOS初学者,但我在Twitter上回复了你,因为这听起来像我在我的应用程序中做的事情。我检查了你的用例,你是对的,第二个导航控制器navigationController是空的。但我想这是故意的,因为它本身就是一个导航控制器。如果它有它的navigationController,这意味着它包含在另一个导航控制器中,因此有两个工具栏。但在我复制的用例中,self.navigationBar就在那里,可以进行自定义。当我推一个UINavigationController时,我推它的rootViewController,它只是被包装起来。所以我当然尝试在我的viewController中访问navigationController,不在UINavigationController.self.navigationController中,红色的一个在我的复制中正确设置为绿色的一个:我在我的机器上复制了用例并上载了项目:。当我进入模态导航控制器时,它会正确记录“。我没有委托,因此根本不需要prepareForSegue。它可以正常工作,只是不需要模式。属性“根视图控制器”是否设置为新的“视图控制器”,属性“模式”是否设置为按钮“测试模式”。请在导航控制器的连接检查器中检查。是的。我怀疑这很可能是我的控制器中的某个东西。我已向苹果提交了DTS。好的,奇怪的错误。请发布您的解决方案,如果有。我没有委托人,所以prepareForSegue应该根本没有必要。而且它可以工作,只是不能正常工作。是属性吗“根视图控制器”设置为新的“视图控制器”,属性“模态”设置为您的按钮“测试模态”。请在导航控制器的连接检查器中检查。是的。我怀疑这很可能是我的控制器中的某个东西。我已向Apple提交了DTS。确定奇怪的错误。请发布您的解决方案,如果有。