gpt4 book ai didi

ios - UINavigationController 需要时间来推送 ViewController

转载 作者:行者123 更新时间:2023-12-01 17:25:16 25 4
gpt4 key购买 nike

采取以下代码:

[[[Resource alloc] init] get:@"/api/v1/basic_user/40/" params:nil completion:^(NSURLResponse *response, NSDictionary *data, NSError *connectionError) {
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
HomeViewController *homeView = [storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"];

NSLog(@"pushing...");
[self.navigationController pushViewController:homeView animated:YES];
}];

这会打印“推”,大约 10 秒(不精确)后我的 HomeViewController出现。 initWithCoder (ViewController 是从 Storyboard 实例化的)绝对没有。在我插入我的 VC 之后,它就被调用了。

但是我的 viewDidLoad方法需要几秒钟才能加载。我不知道多少秒,因为它不准确。它有时根本不加载! (例如,我的 HomeViewController 不显示。

这是更棘手的部分。如果我将推送方法移到我的 block 之外,那么一切都会像魅力一样。

这是怎么回事?为什么我的 VC 在 block 内时这么慢?

编辑:

当我的资源中的方法被调用时,唯一使用线程的是下面的代码:
[NSURLConnection sendAsynchronousRequest:_request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError){
NSLog(@"%@", [[NSJSONSerialization JSONObjectWithData:data options:0 error:nil] description]);
[self toggleNetworkActivityIndicator];

_lastResponse = response;
success(response, data, connectionError);
}];

最佳答案

我唯一能想到的就是你在资源方法中所做的任何事情都是通过调度在另一个线程上进行的。所以试着把你的推送 View Controller 包装在一个大中央dispatch回到主队列,如下代码:

dispatch_async(dispatch_get_main_queue(), ^{
// Push view controller here
});

这解决了一些问题,当我在执行动画时,需要 5-10 秒来完成通常只需要半秒左右的事情。
希望这可以帮助。

关于ios - UINavigationController 需要时间来推送 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27307389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com