JSON сетевой запрос не вводит URLSession.shared.dataTask - PullRequest
1 голос
/ 24 марта 2020

У меня проблемы с выяснением, почему мой dataTask возвращает пустой результат. Проходя через класс My NetworkingManager, выяснилось, что он никогда не входит в URLSession.shared.dataTask. Кто-нибудь знает почему?

Это мой NetworkingManager, который используется в ContentView приложения:

class NetworkingManager: ObservableObject {
    var didChange = PassthroughSubject<NetworkingManager, Never>()

    var showList = ShowResultsAPI(results: []) {
        didSet {
            didChange.send(self)
        }
    }

    init() {
        guard let url = URL(string:  "https://radio80k.airtime.pro/api/live-info") else {
            return }
        URLSession.shared.dataTask(with: url) { (data, _, _) in
            guard let data = data else {
                return }

            let showList = try! JSONDecoder().decode(ShowResultsAPI.self, from: data)

            DispatchQueue.main.async {
                self.showList = showList
            }

        }.resume()
    }
}

1 Ответ

0 голосов
/ 24 марта 2020

На мой взгляд, ваша кодировка выглядит правильно. Имейте в виду, что запрос асинхронный. При отладке URLSession.shared.dataTask вы поймете, что сначала отладчик пропускает dataTask. Когда URLSession получает ответ, он снова вводит URLSession.shared.dataTask. Я бы рекомендовал установить точку останова в соответствии с вашим защитным заявлением. Затем снова отладьте процесс и посмотрите, входит ли отладчик в процесс.

Было бы также интересно наблюдать ответ и ошибку в обработчике завершения, чтобы увидеть, есть ли ошибки.

     URLSession.shared.dataTask(with: url) { (data, response, error) in
       if let error = error {
            print(error)
            return
        }
        guard let httpResponse = response as? HTTPURLResponse,
                    httpResponse.statusCode == 200,
                    let data = data
                    else {
                        print("ResponseProblem")
                        print(response)
                        return
                }
...