HTTP响应回调后移至另一个ViewController

时间:2019-06-03 14:46:16

标签: ios swift

我是个新手。

我想在http响应回调后移到另一个新的ViewController。

我尝试过..


  1. 具有segue或委托协议

    当我在情节提要板上创建序列时(使用ctrl按钮并拖动)

    移动到另一个ViewController比http响应回调更快。

    因此响应数据不会显示在新的ViewController上


  1. 带有InstantiateViewController()和present()函数

    “在非主线程上否”的错误


class RequestViewController: UIViewController {

    ...


    @IBAction func requestButtonTouchUpInside(_ sender: UIButton) {

        http.post("/v1/request", jsonBody) { (response) -> () in

            print(response)

            // I want to move to another ViewController with response here
        }
    }
}

有解决方案吗?

谢谢。

3 个答案:

答案 0 :(得分:3)

@IBAction func requestButtonTouchUpInside(_ sender: UIButton) {

    http.post("/v1/request", jsonBody) { (response) -> () in

        DispatchQueue.main.async { 
            performSegue(withIdentifier: "goToOtherVC", sender: self)      
        }
    }
}

@IBAction func requestButtonTouchUpInside(_ sender: UIButton) {

    http.post("/v1/request", jsonBody) { (response) -> () in

        DispatchQueue.main.async { 
            let vc = OtherViewController()
            self.present(vc, animated: true)
        }
    }
}

顺便说一句,我建议您在闭包中使用[weak self],为避免内存泄漏,您可以在Swift Docs中阅读更多内容

答案 1 :(得分:2)

由于必须始终从主线程进行UI更改,因此必须使用DispatchQueue.main.async来执行UI更改。

DispatchQueue.main.async {
   //Your code to present or push to next View Controller
}

答案 2 :(得分:0)

出现“在非主线程上否”错误,因为您正在从后台线程更新UI。您需要从主线程更改UI。

  @IBAction func requestButtonTouchUpInside(_ sender: UIButton) {
         http.post("/v1/request", jsonBody) {[weak self](response) -> () in
             DispatchQueue.main.async {
                 let nextVC = NextViewController() 
                 self?.present(nextVC,animated: true)
               }
            }
        }