我遇到了一个奇怪的问题。 当将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