2014-02-15 48 views
0

我遇到了一个奇怪的问题。 当将navigationController.viewControllers设置为viewControllers等于当前的UIViewController.viewControllers,然后尝试继续到新的viewController(推塞格)时,UIViewController.viewControllers被搞乱。设置navigationController.viewControllers后来混淆堆栈

确切地说, 我做了以下:

-(void)viewWillAppear:(BOOL)animated 
{ 
... 
    for(int i=0; i<[self.navigationController.viewControllers count]; i++) 
    { 
     NSLog(@"Befor: %d: %@",i, [[self.navigationController.viewControllers objectAtIndex:i] description]); 
    } 
    [[self navigationController] setViewControllers:[NSArray arrayWithObjects:[self.navigationController.viewControllers objectAtIndex:0], self,nil] animated:NO]; 
    NSLog(@"After: Num of view controllers: %d", [self.navigationController.viewControllers count]); 
    for(int i=0; i<[self.navigationController.viewControllers count]; i++) 
    { 
     NSLog(@"After: %d: %@",i, [[self.navigationController.viewControllers objectAtIndex:i] description]); 
    } 

} 

日志的结果:

Befor:货号的视图控制器:2 2014年2月15日17:15:01.144 [827 :60b] Befor:0:20​​14-02-15 17:15:01.145 [827:60b] Befor:1:2014-02-15 17:15:01.147 [827:60b] After:Num of view controllers:2 2014 -02-15 17:15:01.148 [827:60b]之后:0:20​​14-02-15 17:15:01.149 [827:60b]之后:1:

然后我按下了一个按钮,继续到另一个viewController。 就在SEGUE称为此代码之前:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSLog(@"prepareForSegue: Num of view controllers: %d", [self.navigationController.viewControllers count]); 
    for(int i=0; i<[self.navigationController.viewControllers count]; i++) 
    { 
     NSLog(@"prepareForSegue: %d: %@",i, [[self.navigationController.viewControllers objectAtIndex:i] description]); 
    } 
... 

} 

日志的结果:

2014年2月15日17:15:05.388 [827:60B] prepareForSegue:货号视图控制器的:1 2014 -02-15 17:15:05.389 [827:60B] prepareForSegue:0:

我监测navigationController.viewControllers在目的地viewController和似乎rootViewController消失了。 尝试返回时(使用导航控制器后退按钮),事情变得很难看。

我注意到,当我分配一个对象与当前的navigationController.viewControllers不同的数组时,所有这些东西都不会发生,所以现在是一种解决方法。

我做错了什么?

回答

1

看看你的故事板。很可能,推送的视图控制器实际上是模态的,并被包装到它自己的导航控制器中。

比较显示意外数量的视图控制器的两个导航控制器的地址:可能它们是不同的,在这种情况下,您应该检查您添加新的导航控制器的位置。

+0

我重新检查过,我的故事板中的所有细节都是推式。导航控制器的地址是相同的。 – Yony