2015-09-14 23 views
5

Ho trovato diverse domande simili su StackOverflow ma nessuna di esse risolve il mio problema.NSData contentsOfUrl restituisce nil

Sto cercando di ottenere un'immagine da un URL. Ecco come lo faccio:

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

Ma ho ottenuto un errore che mi diceva che data è pari a zero.

Come posso risolvere questo? Grazie.

UPDATE

Ecco alcuni screenshot dell'errore:

enter image description here enter image description here

+0

Il codice è perfettamente funzionante. Penso che stai ricevendo dati nulli a causa di alcuni problemi/restrizioni di rete. Ho controllato lo stesso codice nel mio parco giochi e sto ottenendo il risultato. –

+0

@MidhunMP L'ho provato nel parco giochi e ha funzionato. Ma quando lo eseguo in 'viewDidLoad' di un progetto appena creato ho ottenuto lo stesso errore –

+0

Provare con' NSData (contentsOfURL: option: error) '. Potresti ricevere l'errore. Questo potrebbe essere correlato all'assenza di "https" con iOS9 (e alla sicurezza del trasporto app da impostare)? – Larme

risposta

13

Questo è probabilmente il risultato della nuova sicurezza di trasporto dell'app di Apple che nega una richiesta non HTTPS. Per ovviare a questo problema, devi modificare il file Info.plist della tua app. È possibile definire un'eccezione per quel particolare dominio

<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> 

o disabilitare ATS bene del tutto

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

Questa pagina ha un'immagine utile: http://stackoverflow.com/a/33712228/1711103 –

3

penso che si dovrebbe, prima di tutto, creare un codice resiliente.

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 
     } 
    } 
}