Почему происходит ошибка URL?

Я использую API поиска iTunes, и для тестирования я ищу "Angry Birds" и печатаю результаты. Но когда я преобразую urlPath в NSURL я получаю nil значение. Как это исправить? urlPath есть ссылка, но это nil в переменной URL. Это точная ошибка:

фатальная ошибка: неожиданно найден ноль при развертывании необязательного значения.

var searchTerm: String = "Angry Birds"
var itunesSearchTerm = searchTerm.stringByReplacingOccurrencesOfString(" ", withString: "+", options: NSStringCompareOptions.CaseInsensitiveSearch, range: nil)
var escapedSearchTerm = itunesSearchTerm.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
var urlPath = "https://itunes.apple.com/search?term=\(escapedSearchTerm)&media=software"
var url: NSURL = NSURL(string: urlPath)!
var request: NSURLRequest = NSURLRequest(URL: url)
var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: false)!

print("Search iTunes API at URL \(url)")

connection.start()

2 ответа

Решение

stringByAddingPercentEscapesUsingEncoding возвращает опциональную строку, так что вы получите на самом деле это:

https://itunes.apple.com/search?term=Optional("Angry+Birds")&media=software

Решение состоит в том, чтобы безопасно развернуть Дополнительный:

if let escapedSearchTerm = itunesSearchTerm.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding) {
    let urlPath = "https://itunes.apple.com/search?term=\(escapedSearchTerm)&media=software"
    let url = NSURL(string: urlPath)
    // ...
}

Результат:

https://itunes.apple.com/search?term=Angry+Birds&media=software

NSURL возвращает nil, когда URL содержит недопустимые символы, такие как пробел. Убедитесь, что ваша URlString верна.

Другие вопросы по тегам