dataTask Неожиданно обнаружил ноль при развертывании необязательного значения - PullRequest
0 голосов
/ 24 марта 2020

Я создаю приложение, которое использует только веб-сервис. Для этого я использую метод dataTask (URLSession.shared.dataTask).

Я не жду информацию, только процесс запускается со следующим кодом:

let endPoint = "http://host/service

let url = URL(string: endPoint)

let task = URLSession.shared.dataTask(with: url!) {_, _, _ in

}
task.resume()

Когда метод dataTask выполняется, Xcode показывает мне ошибку:

"Поток 1: Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения"

Есть ли способ пропустить возвращение завершенияHandler (данные, ответ, ошибка)?

1 Ответ

1 голос
/ 24 марта 2020

Требуется обработчик завершения, но его не нужно указывать при создании объекта задачи данных. В этом случае вы должны определить URLSessionDataDelegate, который будет обрабатывать ответ.

"У объекта URLSession не должно быть делегата. Если делегат не назначен, при создании задач в этом сеансе необходимо предоставить блок обработчика завершения для получения данных.

Обработчик завершения блоки в основном предназначены в качестве альтернативы использованию пользовательского делегата. Если вы создаете задачу, используя метод, который принимает блок обработчика завершения, методы делегата для ответа и доставки данных не вызываются ». (https://developer.apple.com/documentation/foundation/urlsessiondatadelegate).

Что касается cra sh, похоже, это связано с развертыванием силы (символом!), Используемым при объявлении задачи. Вы можете использовать условие охраны для безопасного прерывания, если происходит эта ошибка.

guard let url = URL(string: endPoint) else { return }

URLSession.shared.dataTask(with: url) {_, _, _ in
}.resume() 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...