1

在我的应用程序中,我有 UIViewControllers A、B、C、D。我所做的是从 A 到 B 到 C 到 D 遍历。现在堆栈读起来像 A,B,C,D

然后我删除 C 和 D ,它们是堆栈中的前 2 个项目,使用

[self.navigationController popToViewController:BViewController animated:NO];

现在当我 NSLog 时,堆栈中有 A,B。现在,当我尝试迁移到 CI 时,得到“嵌套推送动画会导致导航栏损坏”。我很困惑为什么会这样。谁能帮我解决这个问题。谢谢你的时间

使用以下代码从 BI编辑到 C

UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *viewController = [storybord instantiateViewControllerWithIdentifier:@"C"];
[self.navigationController pushViewController:viewController animated:YES];

这段代码执行完之后,有一个异步代码我们push到D

UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *viewController = [storybord instantiateViewControllerWithIdentifier:@"D"];
[self.navigationController pushViewController:viewController animated:YES];

堆栈现在读取 A、B、C、D。当我弹出时,会出现问题

异步代码

 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

            if (error) {
                NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
                [defaults setValue:@"messagehomescreen" forKey:@"lastscreenstatus"];
                UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
                UIViewController *viewController = [storybord instantiateViewControllerWithIdentifier:@"D"];
                [self.navigationController pushViewController:viewController animated:YES];

            } 
        }];
4

2 回答 2

2

我认为您的问题是您正在异步推送到新的 ViewController。

您不能在后台线程中执行任何 UI 操作。它必须都在主线程中。

如果你在后台运行一些可能需要很长时间的东西,然后推送到一个新的视图控制器,那么你必须总是回到主线程来推送视图控制器。

于 2014-01-13T10:15:06.033 回答
-1

尝试

BViewController *BViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"BVC"];
[self.navigationController pushViewController: BViewController animated:YES];

编辑:是的 -pushviewcontroller将控制器添加到堆栈中。请不要使用它。

-popToViewController用于将视图控制器从堆栈中弹出,直到已经存在的一个。但是您在堆栈上有一系列视图控制器,因此您需要提供其中一个作为参数,如下面的代码。

 [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];

请参阅此链接以获取更多信息。

于 2014-01-13T09:35:05.643 回答