ios - 函数在收到响应后需要一段时间才能继续

标签 ios xcode swift httpresponse

我正在尝试处理来自服务器的响应,并且收到了响应,但是,需要一段时间才能继续其余部分。令人惊讶的是,打印内容工作正常,我检查实时服务器更改,它也工作正常.所以这是xcode造成的。

收到回复并检查是否成功后,我检查..

  // Received HTTP Response

  if let status = json["status"].string {

        if status == "success" {
                   print("C")  
                   activityView.stopAnimating()
                   activityView.removeFromSuperview()

                   self.someAnimation()
                   print("D")
        } else {
            ...
        }
   }

令人惊讶的是,C & D 会立即打印出来,但事件动画似乎并没有在中间停止。大约需要 10 秒才能完成、停止并删除 ActivityIndi​​cator。自定义动画 someAnimation() 也与 ActivityIndi​​cator 同时继续。

我知道这是一个异步线程,但它不是必须停止 ActivityIndi​​cator 并在到达 print("D") 时继续吗?

最佳答案

我认为您正在后台线程上执行 UI 任务,这会导致未定义的行为。避免这种情况的一种方法是将 UI 方法调用包装在 dispatch_async 中:

// Received HTTP Response

if let status = json["status"].string {

    if status == "success" {
               print("C")  
               dispatch_async(dispatch_get_main_queue(), {
                    activityView.stopAnimating()
                    activityView.removeFromSuperview()

                    self.someAnimation()
               });

               print("D")
    } else {
        ...
    }
}

关于ios - 函数在收到响应后需要一段时间才能继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36618486/

相关文章:

Xcode 4 : Update CFBundleVersion on each build using Git repo commit version

iphone - iPad上的“可执行文件已使用无效的权利签名”,在iPhone上运行良好

xcode - 根据更改 View 的用户输入更改 OSX 应用程序窗口大小

ios - loadNibNamed 如何工作? UIView socket 未使用 loadNibNamed 进行初始化

ios - 升级到xcode 4.6和iOS 6.1后的警告用作先前参数的名称,而不用作选择器的一部分

ios - prepareForSegue UITableViewController 使用推送

ios - NSAttributedString 不显示部分文本

xcode - 1 个 UIImagePickerController 和 2 个按钮

ios - 将输入到 UITextField 中的内容转换为计数器编号,例如 00 :01

ios - UITableView 和 UICollectionView 的通用单元格