Как показать сообщение при сбое задания из-за истечения времени ожидания - PullRequest
0 голосов
/ 27 мая 2019

Мне нужен чистый способ печати этого примера («ОШИБКА»), когда задание завершается из-за истечения времени ожидания.

func getUserDataService() -> Bool{
    var getDataStatus = false

    //Create the url with NSURL
    let url = URL(string: "http://someurl")! //change the url

    //Create the session object
    let session = URLSession.shared

    //Now create the URLRequest object using the url object
    var request = URLRequest(url: url)
    request.httpMethod = "GET"
    request.timeoutInterval = 15

    //create dataTask using the session object to send data to the server
    let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in

        guard error == nil else {
            return
        }

        guard let data = data else {
            return
        }

        do {
            //create json object from data
            if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {


                if let httpResponse = response as? HTTPURLResponse {
                    if httpResponse.statusCode == 200 {

                        getDataStatus = true

                    } else {

                    }
                }
            }
        } catch let error {
            print(error)
        }
    })
    task.resume()
    return getDataStatus
}

При неудачном завершении печати выводится следующее, но я не уверенгде это контролировать.

2019-05-27 13: 53: 58.501322-0400 AppName [60195: 841789] Задача. <3> завершено с ошибкой - код: -1001
2019-05-27 13: 53: 58.505525-0400 Имя приложения [60195: 842001] Задача. <3> Ошибка загрузки HTTP (код ошибки: -999 [1:89])

1 Ответ

0 голосов
/ 27 мая 2019

Пожалуйста, прочитайте документацию URL-адрес Загрузка системных кодов ошибок .Ошибка тайм-аута -1001 aka NSURLErrorTimedOut

Ошибка возвращается в обработчик завершения задачи данных.Обработка!

let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
    if let nserror = error as NSError?,
      nserror.code == NSURLErrorTimedOut {
      // do something
      return
    }

Кроме того, вы не можете вернуть значение Bool из этого метода, вы должны добавить обработчик завершения

func getUserDataService(completion: @escaping (Bool) -> Void) {

...

И вызвать

completion(true)

и удалите

return getDataStatus  

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...