Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIViewController的UINavigationController在pushViewController之后为nil_Ios_Objective C_Uinavigationcontroller_Pushviewcontroller - Fatal编程技术网

Ios UIViewController的UINavigationController在pushViewController之后为nil

Ios UIViewController的UINavigationController在pushViewController之后为nil,ios,objective-c,uinavigationcontroller,pushviewcontroller,Ios,Objective C,Uinavigationcontroller,Pushviewcontroller,我正在使用ECSlidingViewController作为我的导航菜单,每当我想从此菜单中按下UIViewController时,按下的UIViewController的UINavigationController总是为零 UINavigationController初始化后,NSLog输出显示以下地址。当我调用方法pushViewController:animated时,UIViewController被推送,但UINavigationController为nil,因此我无法在该控制器中看到

我正在使用
ECSlidingViewController
作为我的导航菜单,每当我想从此菜单中按下
UIViewController
时,按下的
UIViewController
UINavigationController
总是为零

UINavigationController
初始化后,
NSLog
输出显示以下
地址。当我调用方法
pushViewController:animated
时,
UIViewController
被推送,但
UINavigationController
为nil,因此我无法在该控制器中看到
UINavigationBar

以下是我用于此目的的代码片段:

RecommendationsViewController *rvc = [self.storyboard instantiateViewControllerWithIdentifier:@"RecommendationsViewController"];
[self.transitionsNavigationController pushViewController:rvc animated:NO];
self.slidingViewController.topViewController = rvc;
viewdiload
中,
transitionNavigationController
get被初始化为(请注意
slidingViewController
来自github上的ECSlidingViewController项目,类型为
ECSlidingViewController
):


谢谢你的帮助

我想你误解了这是怎么回事

UINavigationController
必须是
topViewController

推送后不要重新分配
topViewController
。通过这样做:

self.slidingViewController.topViewController = rvc;
所要做的就是将当前窗口设置为显示
UIViewController
,这就是为什么您没有看到导航栏,应用程序需要显示
UINavigationController
,这反过来将管理
UIViewController
的列表


导航控制器处理一堆视图控制器,只需按下新的
UIViewController
,无需其他操作

存在一个相关问题,导航控制器的topViewController会忘记它已连接到navigationController

我的故事板设置是:->NavigationController->ViewController NavController和ViewController之间的连接是“根视图控制器”。 我已经为每个视图控制器设置了情节提要ID

我有一个视图管理类“ViewManager”,它包含对所有情节提要视图的弱引用,我使用以下方法获得:

_rootNC = [self.mainStoryboard instantiateViewControllerWithIdentifier:@"NavController"];
//ViewController gets auto-attached to the NavController, and so viewController.navigationController == NavController

_firstVC = [self.mainStoryboard instantiateViewControllerWithIdentifier:@"ViewController"];
//Instantiating the ViewController again clears its navigationController property, and so viewController.navigationController == nil

我认为不应该通过重新实例化视图来获得故事板实例的挂钩。如果其他人能分享他们获取情节提要ViewController弱引用的最佳实践,我将不胜感激,因为我可以在一个viewManager类中控制它们。(我倾向于在NavigationController的viewDidLoad中设置viewManager.rootNC)。

请发布代码的您部分您没有为
self.transitionNavigationController添加代码。
停止代码的滴灌输入行。同样,self.slidingViewController.topViewController来自哪里。把所有的代码都贴上去,直到我们看到一个“[[alloc]init]”,你问为什么它为零,并且不会告诉我们你在哪里分配它。问题似乎与
情节提要
self.slidingViewController有关。topViewController
必须是
UINavigationController
,因此,我猜不可能推送一个正常的
UIViewController
,我现在解决了这个问题,在情节提要中将属性仅设置为
UINavigationController
。不要忘记标记顶部答案,并对解决问题的任何答案进行上选。其他面临同样问题的人会想知道是什么解决了你的问题,那些花时间回答你问题的人应该得到代表点什么是
UINavigationViewController
?当我执行此操作时,
self.slidingViewController.topViewController=rvc
会推动
UIViewController
,但没有导航栏。我想不可能将
UIViewController
设置为topViewController,它必须是
UINavigationController
@user1463853,这是我的一个打字错误,显然我指的是
UINavigationController
。请再读一遍我的答案,你所做的只是发表你最后的评论,我的答案也是回应。多亏了你可爱的帮助,我可以找到解决这个问题的方法。我现在将topViewController转换为
UINavigationController
如下
UINavigationController*navC=(UINavigationController*)self.slidingViewController.topViewController
然后按下
UIViewController
效果非常好:
[navC pushViewController:[self.storyboard instanceeviewcontrollerwhiteIdentifier:@“RecommendationsViewController”]动画:是]@user1463853是的,看起来差不多正确。很高兴我帮了忙。别忘了将我的答案标记为“最佳答案”并向上投票,这样其他人就会知道它在面对同一问题时已修复,我会得到修复的代表分数。我不确定你是否对我的问题或其他人投了否决票?如果是这样,请取消否决票,因为你能够回答这个问题。
_rootNC = [self.mainStoryboard instantiateViewControllerWithIdentifier:@"NavController"];
//ViewController gets auto-attached to the NavController, and so viewController.navigationController == NavController

_firstVC = [self.mainStoryboard instantiateViewControllerWithIdentifier:@"ViewController"];
//Instantiating the ViewController again clears its navigationController property, and so viewController.navigationController == nil