我遇到了一個奇怪的問題。 當將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:2014-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:2014-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
不同的數組時,所有這些東西都不會發生,所以現在是一種解決方法。
我做錯了什麼?
我重新檢查過,我的故事板中的所有細節都是推式。導航控制器的地址是相同的。 – Yony