![](/img/trans.png)
[英]JSONSerialization with URLSession.shared.dataTask errors
[英]UIActivityIndicatorView not showing before the URLSession.shared.dataTask
当我在 API 请求之前调用它时,我的 UIActivityIndicatorView 没有显示,并且会在请求完成后显示,
这是我在按钮的TouchUpInside
内运行的函数
func onLogin () {
let activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
activityIndicator.center = view.center
activityIndicator.hidesWhenStopped = true
activityIndicator.style = UIActivityIndicatorView.Style.gray
view.addSubview(activityIndicator)
activityIndicator.startAnimating()
do {
let data = try self.getData()
let loginData = try JSONDecoder().decode(LoginResponse.self, from: data!)
print(loginData)
} catch {
let alert = UIAlertController(title: "Login failed", message: nil, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default))
present(alert, animated: true, completion: nil)
}
}
我的请求代码是
static func getData() throws -> Data? {
let urlData = URL(string: "www.example.com")
var request : URLRequest = URLRequest(url: urlData!)
request.httpMethod = "POST"
request.httpBody = self.getBodyString.data(using: .utf8)
var data: Data?
var response: URLResponse?
var error: Error?
let semaphore = DispatchSemaphore(value: 0)
URLSession.shared.dataTask(with: request) { d,r,e in
data = d
response = r
error = e
semaphore.signal()
}.resume()
_ = semaphore.wait(timeout: .distantFuture)
if error != nil {
throw error!
}
return data
}
当我在onLogin()
函数中使用getData()
删除do catch
,UIActivityIndicatorView 运行良好。
我的 API 调用的响应是请求超时,但我想看到加载请求的指示器。
尝试将活动指示器带到 UIview 的前面并在 DispatchQueue.main.async 中使用它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.