2015-09-14 41 views
5

Znalazłem kilka podobnych pytań na temat StackOverflow, ale żaden z nich nie rozwiązał mojego problemu.NSData contentsOfUrl zwraca zero

Próbuję uzyskać obraz z adresu URL. Oto jak to zrobić:

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

Ale mam błąd informujący mnie, że data jest zerowa.

Jak mogę to rozwiązać? Dzięki.

UPDATE

Oto kilka zrzutów ekranu z błędem:

enter image description here enter image description here

+0

Twój kod działa idealnie. Myślę, że otrzymujesz dane zerowe z powodu pewnych problemów/ograniczeń sieciowych. Sprawdziłem ten sam kod na moim boisku i otrzymuję wynik. –

+0

@MidhunMP Próbowałem go na placu zabaw i działało. Ale kiedy uruchomię go w 'viewDidLoad' z nowo utworzonego projektu otrzymałem ten sam błąd –

+0

Spróbuj z' NSData (contentsOfURL: opcja: error) '. Możesz dostać błąd. Czy może to być związane z brakiem "https" w systemie iOS9 (i ustawieniem App Transport Security do ustawienia)? – Larme

Odpowiedz

13

Jest to prawdopodobnie wynik nowego zabezpieczenia transportu aplikacji firmy Apple odmawiającego żądania bez HTTPS. Aby obejść ten problem, musisz zmodyfikować plik swojej aplikacji o Info.plist. Można też określić wyjątek dla danej domeny

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

lub wyłączyć całkowicie grzywny ATS

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

Ta strona zawiera użyteczny obraz: http://stackoverflow.com/a/33712228/1711103 –

3

myślę, że powinna przed wszystkim stworzenie kodu sprężysty.

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