我有一个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()
}
}