2015-09-14 3 views
5

Я нашел несколько похожих вопросов в StackOverflow, но ни одна из них не решила мою проблему.NSData contentsOfUrl возвращает nil

Я пытаюсь получить изображение с URL-адреса. Вот как я это делаю:

let url = NSURL(string: "http://pic3.zhimg.com/8161ba9638273e0fb1a0201789d22d8e_m.jpg") 
let data = NSData(contentsOfURL: url!) 
let image = UIImage(data: data!) 

Но я получил сообщение об ошибке говорит мне, что data равна нулю.

Как я могу это решить? Благодарю.

UPDATE

Вот некоторые скриншоты ошибки:

enter image description here enter image description here

+0

Ваш код прекрасно работает отлично. Я думаю, что вы получаете нулевые данные из-за некоторых сетевых проблем/ограничений. Я проверил тот же код на своей игровой площадке, и я получаю результат. –

+0

@MidhunMP Я попробовал это на детской площадке, и это сработало. Но когда я запускаю его в 'viewDidLoad' только что созданного проекта, я получил ту же ошибку. –

+0

Попробуйте использовать' NSData (contentsOfURL: option: error) '. Вы можете получить ошибку. Может ли это быть связано с отсутствием «https» с iOS9 (и установкой безопасности приложения для установки)? – Larme

ответ

13

Возможно, это связано с тем, что новая транспортная безопасность Apple не отрицает запрос, не связанный с HTTPS. Чтобы обойти это, вам необходимо изменить файл Info.plist вашего приложения. Вы можете либо определить исключение для конкретного домена

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
     <key>pic3.zhimg.com</key> 
     <dict> 
      <key>NSIncludesSubdomains</key> 
      <true/> 
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> 
      <true/> 
     </dict> 
    </dict> 
</dict> 

или отключить ATS полностью

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
</dict> 
+0

Эта страница имеет полезное изображение: http://stackoverflow.com/a/33712228/1711103 –

3

Я думаю, вы должны, прежде чем все, создать упругую код.

if let url = NSURL(string: "http://pic3.zhimg.com/8161ba9638273e0fb1a0201789d22d8e_m.jpg") 
{ 
    if let data = NSData(contentsOfURL: url) 
    { 
     if let image = UIImage(data: data) 
     { 
      //Do something 
     } 
    } 
} 
Смежные вопросы