gpt4 book ai didi

ios - UIAlertView、NSURLConnection 和 wait_fences

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

我正在尝试显示 UIAlertViewUIActivityIndicator用户在模态视图 Controller 中按下“登录”后。要登录,使用 sendAsynchronousRequest:queue:completionHandler: 将凭据发送到服务器。来自 NSURLConnection类(class)。我的实现如下:

UIAlertView * spinner = [[UIAlertView alloc] initWithTitle:@"Connecting to server..." message:nil delegate:self cancelButtonTitle:nil otherButtonTitles: nil];
[spinner show];
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
indicator.center = CGPointMake(spinner.bounds.size.width * 0.5f, spinner.bounds.size.height * 0.5f+5.0f);
[indicator startAnimating];
[spinner addSubview:indicator];
[indicator release];

[NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * res, NSData * data, NSError * err) {
[spinner dismissWithClickedButtonIndex:0 animated:YES];
[spinner release];
...
}

如果无法访问服务器或服务器速度很慢,这似乎可以正常工作,但如果服务器立即回复,则微调器似乎在控制台日志记录后 3-5 秒后才被关闭
wait_fences: failed to receive reply: 10004003

我认为这是因为我正在关闭模态视图 Controller (登录屏幕),而 UIAlertView仍在显示,但我不确定为什么会发生这种情况,因为它通常应该被解雇。我做错了什么,正确的做法是什么?

最佳答案

我已经多次看到这个日志 - 它总是由内部动画框架中的意外状态或默认 View 动画之间的冲突引起的。

可能的原因:

  • 从内部开始动画viewDidLoad , viewWillAppear或类似的方法 - 在实际显示 View 之前。
  • 显示/隐藏 UIAlertView当另一个 UIAlertView动画仍在运行。这包括显示来自 alertView:didDismissWithButtonIndex: 的警报.
  • 模态视图动画和警报动画之间的冲突。
  • UINavigationController之间的冲突推送/弹出动画和警报动画。

  • 您的案例 :您可能在警报完全显示之前就隐藏了警报,并且两个动画之间发生了冲突。显示动画通常需要大约 0.4 秒,但您的响应可以更早到达 - 触发隐藏动画。

    可能的解决方案:
  • 动画结束时触发请求 (didPresentAlertView)。
  • 测量连接的持续时间,如果小于 0.4 秒,请延迟隐藏动画。
  • 关于ios - UIAlertView、NSURLConnection 和 wait_fences,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11431060/

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