在我使用 WebView 转入视图控制器以在 resultFormHtml 变量中显示 HTML 之前,我试图将我的 https 发布响应放入一个名为 resultFormHtml 的变量中。
使用下面的代码,我在 perfomSegue 上得到一个错误“UIViewController.init(coder:) 只能从主线程使用”
如何让我的 resultFormHtml 变量不为空并转到下一个 VC?
dpoHttpPost(dpoHttp: dpoHttp) { [self] (result) in
if result == true {
self.performSegue(withIdentifier:"rechargeDpoSegue", sender: self)
}else{
//do something here
}
}
func dpoHttpPost(dpoHttp: Bool,completion: @escaping (Bool)->()){
let url = URL(string: self.dpoURL)!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = self.postFormHtml.data(using: .utf8)
// Create the HTTP request
let session = URLSession.shared
let task = session.dataTask(with: request) { (data, response, error) in
if let error = error {
// Handle HTTP request error
self.resultFormHtml = "<HTML><BODY>Error</HTML></BODY>"
completion(false)
} else if let data = data {
// Handle HTTP request response
self.resultFormHtml = String(data: data, encoding: .utf8)!
print(String(data: data, encoding: .utf8)!)
completion(true)
} else {
// Handle unexpected error
self.resultFormHtml = "<HTML><BODY>Error</HTML></BODY>"
completion(false)
}
}
task.resume()
}
答案 0 :(得分:0)
使用 DispatchQueue:
if let error = error {
// Handle HTTP request error
self.resultFormHtml = "<HTML><BODY>Error</HTML></BODY>"
completion(false)
} else if let data = data {
DispatchQueue.main.async{ [self] in
// Handle HTTP request response
self.resultFormHtml = String(data: data, encoding: .utf8)!
print(String(data: data, encoding: .utf8)!)
completion(true)
}
} else {
// Handle unexpected error
self.resultFormHtml = "<HTML><BODY>Error</HTML></BODY>"
completion(false)
}