2015-09-14 95 views
5

我在StackOverflow上發現了幾個類似的問題,但沒有一個解決了我的問題。NSData contentsOfUrl返回nil

我想從網址中獲取圖片。下面是我如何做到這一點:

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)'。您可能會收到錯誤。這可能與iOS9中缺少「https」(以及設置的應用傳輸安全性)有關嗎? – 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 
     } 
    } 
}