2016-09-08 4 views
1

Это проблема, и я не могу найти решение. В моей программе я пытаюсь открыть Safari с URL, и это было нормально до случая: я пытался связать сайт с русским хоста и домена, например:NSURL и русские домены

let url = "http://карта.рф" 
UIApplication.sharedApplication().openURL(NSURL(string: url)!) 

Тогда у меня есть ошибка:

fatal error: unexpectedly found nil while unwrapping an Optional value

Таким образом, класс NSURL не может создать объект по ссылке с русскими символами. Я попытался использовать url.stringByAddingPercentEncodingWithAllowedCharacters (NSCharacterSet.URLFragmentAllowedCharacterSet())! и тому подобное, но проблема в том, что он меняет ВСЕ «неправильные» символы на другие, но необходимо связать именно русские сайты в российских доменах, что означает, что в url-адресе нет действительно неправильных букв.

Я не верю, что NSURL не может работать с неанглийскими символами. Может кто-нибудь мне помочь?

+0

@ HamzaAnsari, это просто похоже, но не уточняет все, что я хочу. –

+0

@kennytm, это абсолютно не то, что мне нужно. –

ответ

1

Вам нужен набор символов, связанный с хозяина

let string = "http://" + "карта.рф".stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())! 
let url = NSURL(string:string) 

Если вы должны кодировать также path и query использование NSURLComponents и кодировать другие компоненты по отдельности.

let components = NSURLComponents() 
components.scheme = "http" 
components.host = "карта.рф".stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet()) 

let url = components.URL! 
+0

Я думаю, что Apple хочет, чтобы мы теперь использовали 'URLComponents'. Эти двойные косые черты нарушают URL-адрес, так как они также кодируются. – Desdenova

+0

@vadian, это решает проблему, хотя обычный шрифт (url) показывает, конечно, абракадабра, но в Safari это правильный адрес. –

+0

Я обновил ответ, чтобы сохранить 'http: //' в первом примере. – vadian