Как решить - объединить ошибки |Ошибка домена = NSURLErrorDomain Code = -999 "отменено" - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь проанализировать JSON, используя новую платформу Combine. Тем не менее, каждая моя попытка возвращается с отмененной ошибкой. Когда я использую точно такой же URL-адрес без объединения, он работает нормально.

Нижняя функция работает нормально, верхняя выдает ошибку независимо от того, что я делаю.

static func performNetworkRequestUsingCombine(url urlWithQuery:URL){
        //let decoder = JSONDecoder()
        let publisher = URLSession.shared.dataTaskPublisher(for: urlWithQuery)
            .map({$0.data})

        .eraseToAnyPublisher()
            .sink(receiveCompletion: { (status) in
                switch status {
                    case .failure(let incomingError):
                        print(incomingError.localizedDescription)
                    case .finished:
                    break
                }
            }) { (data) in
                let dataString = String(data: data, encoding: .utf8)
                print(dataString!)
        }
        publisher.cancel()
    }

static func performNetworkRequest(url urlWithQuery: URL, dataValue : @escaping (WeatherObject)->Void){

        let decoder = JSONDecoder()
        let task = URLSession.shared.dataTask(with: urlWithQuery) { (data, response, error) in

            if error != nil {
                print(error!.localizedDescription)
                return
            }
            if let data = data {
                do {
                    let weatherData = try decoder.decode(WeatherObject.self, from: data)
                    dataValue(weatherData)
                } catch let localError {
                    print(localError.localizedDescription)
                }
            }
        }
        task.resume()
    }

}

Я ожидаю, что мои данные JSON будут напечатаны втерминал, но вместо этого я получаю следующую ошибку:

2019-10-25 14: 59: 34.452071-0400 Clima [2127: 98883] Задача <663D6D3A-48B8-49E6-9103-AA1D89513D84>. <1> завершенас ошибкой [-999] Ошибка Домен = NSURLErrorDomain Код = -999 «отменен» UserInfo = {NSErrorFailingURLStringKey = https://api.openweathermap.org/data/2.5/weather?lon=-122.4&APPID=29ecd35ff6b9e63498cb8fb479ba6ca0&units=imperial&lat=37.8, NSLocalizedDescription = отменен, NSErrorFailingURLKey = https://api.openweathermap.org/data/2.5/weather?lon=-122.4&APPID=29ecd35ff6b9e63498cb8fb479ba6ca0&units=imperial&lat=37.8}

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Просто прекратите отменять подписчика. Удалить publisher.cancel(). Что это за вопрос?

0 голосов
/ 26 октября 2019

Добавлен оператор .receive (on :), и это решило проблему!

static func performNetworkRequestUsingCombine(url urlWithQuery:URL){
        //let decoder = JSONDecoder()

        let publisher = URLSession.shared.dataTaskPublisher(for: urlWithQuery)
            .map({$0.data})
            .receive(on: DispatchQueue.main)
            .sink(receiveCompletion: { (completionError) in
                switch completionError {
                    case .failure(let error):
                        print(error.localizedDescription)
                    case .finished:
                    break
                }
            }) { (data) in
                guard let stringData = String(data: data, encoding: .utf8) else {return}
                print(stringData)
        }
        publisher.cancel()
    }
...