导航堆栈中找不到推送的View控制器?

时间:2012-08-16 05:35:54

标签: iphone ios ipad

我有一个应用程序,我从viewcontroller.testviewcontroller推送一个testviewcontroller有一个后退按钮和一个是按钮。当按下后退按钮时,我将使用

回到上一个按钮
[self.navigationController popViewControllerAnimated:YES];

按下Yes按钮时我正在使用

按下另一个视图控制器
 GettingViewController *get  =[[GettingViewController alloc] initWithNibName:@"GettingViewController" bundle:nil];
 [self.navigationController pushViewController:get animated:NO];

这一切都运行正常。在按下按钮时的奖励中我回弹到testviewcontroller。使用这个`

for (TestViewController*vc in [self.navigationController viewControllers]) {
            if ([vc isKindOfClass: [TestViewController class]]){

                 [[self navigationController] popToViewController:vc animated:YES];
            }
        }
`

但是当我按下该视图中的后退按钮时,它需要转到我的新推视图控制器,即rewardsget。但是当我打印视图控制器时,它不存在于堆栈中。所以它再次回到第一个按下的viewcontroller,而不是最新的。有人帮我这个吗?

2 个答案:

答案 0 :(得分:0)

听起来你的堆栈中有多个TestViewController实例。要获得正确的指针,只需将指向TestViewController的指针传递给GettingViewController,您可能希望拥有一个属性:

@property (nonatomic, assign) TestViewController* testViewController;

当您准备好回到TestViewController电话[self.navigationController popToViewController: self.testViewController animated: YES];时。

那就是说,听起来你的导航流程可能需要更多思考。在iOS上,中心辐射导航流是最自然的。

答案 1 :(得分:0)

在你的for循环中,你通过所有的viewControllers,但已经假装这些是TestViewController(TestViewController * vc ...)。当然,你要找的第一个是KindOfClass TestViewController然后!

尝试将其更改为UIViewController * vc!