在后台处理dataTask GET请求

时间:2020-06-23 13:21:20

标签: ios swift nsurlsessiondatatask

我有一个API,可以从GET请求中获取约1000条记录。目前,我正在使用dataTask通过URLSession获取内容。复杂的是,请求进入后台模式后就立即冻结。当我进行一些研究时,我发现NSURLSessionDataTask不支持后台模式,而是必须将downloadTask与backgroundSessionConfiguration一起使用。因此,我很难相应地修改我的代码。我当前的代码如下。

class Network: NSObject {

 //Singleton
  public static var shared: Network {

    if networkCalls == nil {
        networkCalls = Network()
    }
    return networkCalls!

  }


 //Place where issue is converting the dataTask to downloadTask
  private func performWebServiceRequest <T: Codable>(type: T.Type, with url: URL, contentType: CONTENT_TYPE? = nil, requestType: String, paramData: T? = nil, requestOptions: [String: String]?, responseStructure: String, successBlock: @escaping SuccessBlock, failureBlock: @escaping FailureBlock) {

    let session = URLSession.shared
    let request = NSMutableURLRequest(url: url)
    request.httpMethod = requestType // As in "POST", "GET", "PUT" or "DELETE"
    request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData


   let task = session.dataTask(with: request as URLRequest) { (data, response, error) in
        guard let data: Data = data, let response: URLResponse = response, error == nil else 
      {
        failureBlock(0, ERROR_MESSAGE)
      }

      let responseStatusCode: Int =  (response as! HTTPURLResponse).statusCode


       if reponseStatusCode == 200 {


                do {
                    let result = try JSONDecoder().decode(type, from: data)
                    successBlock(result)

                } catch {

                    failureBlock(0,"Error")
                }
       }

     }

     task.resume()
  }

}

0 个答案:

没有答案