gpt4 book ai didi

iOS - 嵌套的推送动画可能导致导航栏损坏

转载 作者:行者123 更新时间:2023-11-29 12:56:01 26 4
gpt4 key购买 nike

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

然后我使用

删除堆栈中的前 2 项 C 和 D
[self.navigationController popToViewController:BViewController animated:NO];

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

编辑从 B 我使用下面的代码转到 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];

}
}];

最佳答案

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

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

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

关于iOS - 嵌套的推送动画可能导致导航栏损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21087332/

26 4 0