我确信这是我的问题,而不是使用navigationController类。我正在使用NavigationController来跟踪最多2个大小为2的ViewControllers。所以当有一个或更少的时候我推开一个新的VC。当我有两个基本上,用一个包含新VC的堆栈替换堆栈并剥离我刚才的位置。代码如下:
- (IBAction)displayNextView:(id)sender
{
FBRightVC *nextVC = [[FBRightVC alloc] init];
if ([[self.navigationController viewControllers] count] <= 1)
{
[self.navigationController pushViewController: nextVC
animated: YES];
NSLog(@"iffy");
}
else if ([[self.navigationController viewControllers] count] == 2)
{
NSMutableArray *newVCArray = [[NSMutableArray alloc] initWithObjects:
[[self.navigationController viewControllers] objectAtIndex:0], nextVC, nil];
NSLog(@"VC's in newVCArray = %i", [newVCArray count]);
[self.navigationController setViewControllers: newVCArray animated: NO];
NSLog(@"VC's in navigationController VC Array = %i", [self.navigationController.viewControllers count]);
[newVCArray release];
}
[nextVC release];
}
该程序似乎行为正常,但我得到的日志输出是:
2012-01-16 16:09:46.485 SA101 [7671:f803] VC in newVCArray = 2
2012-01-16 16:09:46.486 SA101 [7671:f803]导航控制器VC阵列中的VC = 0
因此我放入的ViewController数组大小合适。但是导航控制器本身报告的ViewControllers数组的大小是0.我并不担心这个但是感到困惑和好奇。我不担心的原因是else语句总是在下次执行时执行 - 这意味着此时在navigationControllers堆栈中实际上有两个VC。有人可以告诉我为什么立即查询返回的结果不同于后来对navigationController的查询?
[这部分在评论中回答 - 一个可能相关的问题是:我是否应该发布我分配的NSMutableArray来保存我正在放入的新ViewController堆栈?]