2016-10-13 9 views
0

Я пытаюсь открыть pdf-файл из моего приложения Swift, но я не могу заставить его работать.Как открыть ссылку в формате pdf при нажатии кнопки на Swift?

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

UIApplication.shared.openURL(URL(string: "http://www.url.com" + id)!) 

Но я получаю следующее сообщение об ошибке:

fatal error: unexpectedly found nil while unwrapping an Optional value

так я подумал, что ошибка связана с тем, что id был ноль, поэтому я сделал два prints, чтобы увидеть, что было получено: один для url и один для id. Оба они верны, и если я копирую URL-адрес на панели навигации браузера, он отлично работает (я не могу предоставить реальный url, потому что он принадлежит клиенту).

У меня есть эта функция, обернутая внутри @IBAction, чтобы обнаружить, когда нажата кнопка, поэтому я посмотрел, было ли соединение сломано. Это также правильно.

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

Я что-то упустил? Должен ли я кодифицировать URL-адрес каким-то образом?

P.S: Я использую Xcode8 и Swift3.

ОБНОВЛЕНИЕ: Если я установил www.google.es, он отлично работает. Это может быть проблема с использованием переменных внутри URL-адреса?

Заранее благодарен!

+1

Разделите свой код, чтобы вы могли видеть причину. Сначала создайте строку. Затем создайте «URL». Затем вызовите 'openURL'. Тогда вы найдете настоящую причину. – rmaddy

+0

Это дает мне значение «nil», когда я использую «URL (string: mystring)», но если я скопирую URL-адрес на панели навигации браузера, он будет работать. –

ответ

0

Наконец-то, после нескольких часов, поиск по проблеме и следуя рекомендации @rmaddy (Спасибо!) Я разделил свою функцию на три части, и я мог видеть, что URL-адрес возвращает значение nil.

Было странно, потому что я мог скопировать строку в панель навигации браузера, и она работала хорошо, поэтому я подумал, что это может быть что-то вроде кодирования. Один раз, когда я его закодировал, я заметил, что id pdf был получен с \r в финале id. Как это:

id004.pdf\r 

решение, которое я сделал, заключается в следующем:

var string = "http://www.url.com" + id 
var index1 = string.index(string.endIndex, offsetBy: -1) 
var substring1 = string.substring(to: index1) 

let encodedString = substring1.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) 
UIApplication.shared.openURL(NSURL(string: encodedString!) as! URL) 

закодированной строки необходимо, потому что, если не ссылка больше не работает.