2014-02-15 85 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