Swift Nil Исключение на URL - PullRequest
0 голосов
/ 29 мая 2018

Я новичок в Swift и пишу приложение, которое считывает данные со сканера, а затем публикует их на веб-странице.Я сейчас беру данные из поля редактирования текста на моей основной раскадровке, и когда я нажимаю кнопку поиска, чтобы вызвать следующий код, выдается следующее исключение.Я установил точку останова и проверил значение temp перед его использованием в URL-адресе и правильно его закрасил (не ноль).Если я введу в поле редактирования, то код работает нормально;открывает страницу, даже если я удаляю содержимое поля редактирования, используя значок очистки (x).

Я не могу понять, какая переменная равна нулю и как исправить или защитить код.Любая помощь приветствуется.

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

func setStatus(_ status: String)
{
    statusLabel.text = status
}

func processRead(_ data: String?)
{
    if (data != nil)
    {
        var temp: String = data!
        setStatus(temp)

        temp = "foo.com?data=" + temp

        let url: URL = URL(string: temp)!      //  <<<< THROWS EXCEPTION / BREAK POINT 
        UIApplication.shared.openURL(url)
    }
}

ОБНОВЛЕНИЕ - Исправленный код -

func setStatus(_ status: String)
{
    statusLabel.text = status
}


func processRead(_ data: String?)
{
    if (data != nil && !data!.isEmpty)
    {
        let temp = "https://foo.com/data=" + data!.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!);
        if let url = URL(string: temp)
        {
            setStatus(data!)
            UIApplication.shared.openURL(url)
        }
        else
        {
            print("Bad URL: " + temp);
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Существует вероятность, что temp содержит некоторые символы, которые недопустимы в части запроса URL-адреса.Это делает всю строку недопустимым URL, поэтому URL.init возвращает ноль.Вам нужно экранировать этих персонажей, вызывая addingPercentEncoding:

URL(string: "foo.com?data=" + temp.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!)
0 голосов
/ 29 мая 2018

В результате инициализации объекта URL временной строкой он не может успешно преобразовать строку в URL-адрес.Так как инициализатор URL init?(string: String) является необязательным инициализатором, он может вернуть nil, если произошла ошибка при преобразовании строки в URL.Попробуйте добавить "https://" к вашей строке.

 temp = "https://foo.com?data=" + temp
...