gpt4 book ai didi

ios - 在 viewDidLoad 中执行对服务器的调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:52 25 4
gpt4 key购买 nike

我是 iOS 开发的新手,我遇到了以下问题。我需要用从服务器获取的数据填充 UITableView。

我正在使用 AFNetworking 进行此调用。我想使用 SVProgressHUD 显示“加载 View ”,我正在执行以下操作:

-(void) viewDidLoad{
[super viewDidLoad];
[SVProgressHUD showWithMaskType:SVProgressHUDMaskTypeGradient];
[[MyServer sharedManager] fetchFromServerwithCompletionHandler:^(NSArray *elements, BOOL error) {
_elements = elements;
[_elementsTableView reloadData];
[SVProgressHUD dismiss];
}];
}

我从服务器得到了正确的答案,但没有显示进度 HUD。对服务器的调用确实需要几秒钟,因此有时间加载进度 HUD View ,但没有任何反应。

我正在 viewDidLoad 中执行调用,因为我需要在加载 View 后立即进行调用,并且我只想调用一次。

如果我将这个代码块移动到 viewDidAppear 进度 hud 加载,但是每次显示 View 时都会调用此方法,我不希望这样.. .

非常感谢!

最佳答案

问题不在于如果在 viewDidLoad 中完成网络调用不会发生(因为这是正确的地方),而是试图添加 viewDidLoad 中的 SVProgressHUD 将无法工作,因为在为 SVProgressHUD 构造 view 的过程中,这还为时过早,无法弄清楚将 HUD 放在哪里。

一个简单的解决方案是让 viewDidLoad 延迟调用它,让 UI 有机会进入 SVProgressHUD 可以正确将自己置于查看层次结构。看起来很愚蠢,您可以将代码分派(dispatch)回主循环,这让 UI 有机会 catch 进度:

- (void)viewDidLoad
{
[super viewDidLoad];

dispatch_async(dispatch_get_main_queue(), ^{
[SVProgressHUD showWithMaskType:SVProgressHUDMaskTypeGradient];
[[MyServer sharedManager] fetchFromServerwithCompletionHandler:^(NSArray *elements, BOOL error) {
_elements = elements;
[_elementsTableView reloadData];
[SVProgressHUD dismiss];
}];
});
}

关于ios - 在 viewDidLoad 中执行对服务器的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20277423/

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