ios - UIAlertView、NSURLConnection 和 wait_fences

标签 ios alertview wait-fences

我正在尝试显示 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/

    相关文章:

    iphone - iphone应用中的图像增强

    ios - 正确使用 Enum,Button 总是相同的文本

    iOS 确认 UIAlertView 在 "Are you sure?"设置 App

    ios - 更改按钮图像会删除 skscene

    ios - UITextField 键盘。如何禁用强制触摸?

    iphone - iOS-如何在代码开始之前显示alertView

    ios - 如何使用 swift 2.2 让警报 View 出现在 View Controller 的中心

    ios - 使用基于 AVCapture 的 viewController 崩溃

    ios - 如何调试 wait_fences 错误