Вызов API дает устаревший ответ в swift - PullRequest
0 голосов
/ 27 декабря 2018

Я делаю HTTP-запрос на получение в быстром, где я получаю устаревший ответ по какой-то причине .. Я сравнил ответ в Почтальоне с тем, который я напечатал в XCode, и я получаю это ..

Заголовки ответов в Почтальоне:

Postman response headers screenshot

Заголовки ответов, напечатанные в консоли Xcode:

Xcode console response headers screenshot

см. Разделы, выделенные зеленым цветом, оба вызова выполняются одновременно.Это живой API моего проекта, и поскольку текущие текущие данные не меняются, я не показываю ответ JSON.Но, как вы можете видеть в заголовках ответов, значение для поля «Дата» в Postman и Xcode отличается. Когда я делаю это в Postman, оно каждый раз дает мне новый ответ.Но в Xcode я получаю один и тот же ответ весь день.Я не знаю, почему это происходит.И после удаления содержимого симулятора (или удаления приложения из симулятора) и повторной установки проекта он дал мне новый обновленный ответ.Но это снова повторяется ...

Код в классе RequestManager:

import Foundation

class RequestManager {

class func callTheGetAPI(urlString: String, closure: @escaping (Data?)->Void) {

    let url = URL.init(string: urlString)
    var urlRequest = URLRequest(url: url!)
    urlRequest.httpMethod = "GET"
    urlRequest.addValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
    let dataTask = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in

        if (error != nil) {
            print(error!.localizedDescription)
        } else {
            let httpResponse = response as? HTTPURLResponse
            print(httpResponse!.allHeaderFields)
            closure(data)
        }
    }
    dataTask.resume()
  }
}

код в моем ViewController:

 override func viewDidLoad() {
    super.viewDidLoad()
    getRecommendedData()
}

func getRecommendedData() {
    let url = APIManager.API_01
    RequestManager.callTheGetAPI(urlString: url, closure: { response in

        do {
            if (try JSONSerialization.jsonObject(with: response!, options: .mutableContainers) as? [[String : Any]]) != nil{
//             print(json)
            }
        } catch let error {
            print(error.localizedDescription)
        }

    })
}

Это все, что у меня есть, ребята .. Есликто-нибудь знает, что происходит, или если я делаю что-то не так .. Пожалуйста, помогите ..

1 Ответ

0 голосов
/ 27 декабря 2018

Заменить строку ниже

var urlRequest = URLRequest(url: url!)

На

var urlRequest = URLRequest(url: url!, cachePolicy: URLRequest.CachePolicy.reloadIgnoringCacheData, timeoutInterval: 60)

Из документации reloadIgnoringCacheData: указывает, что данные для загрузки URL-адреса должны загружаться из исходного источника.Никакие существующие данные локального кэша, независимо от их актуальности или действительности, не должны использоваться для удовлетворения запроса загрузки URL.

По умолчанию используются кэши.

...