2015-09-14 14 views
5
döndürür

StackOverflow ile ilgili birkaç benzer soru buldum ancak bunların hiçbiri sorunumu çözmüyor.NSData contentOfUrl nil

Bir url'den resim almaya çalışıyorum.

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

Ama data nil olduğunu bildiren bir hata var: İşte bunu nasıl.

Bunu nasıl çözebiliriz? Teşekkürler.

GÜNCELLEME İşte

hata bazı ekran görüntüleri var:

enter image description here enter image description here

+0

Kodunuz mükemmel çalışıyor cezası devre dışı bırakabilir ya. Bazı ağ sorunları/kısıtlamaları nedeniyle sıfır veri alıyorsunuz. Aynı kodu oyun bahçemde kontrol ettim ve sonucu alıyorum. –

+0

@MidhunMP Oyun parkında denedim ve işe yaradı. Ancak yeni oluşturulan bir projenin viewDidLoad işlevini çalıştırdığımda aynı hatayı aldım –

+0

'NSData (contentOfURL: option: error)' ile deneyin. Hatayı alabilirsiniz. Bu iOS9 (ve Uygulama Aktarım Güvenliği'nin ayarlanması) ile "https" bulunmaması ile ilgili olabilir mi? – Larme

cevap

13

Bu muhtemelen HTTPS olmayan bir isteği reddeden Apple'ın yeni uygulama taşıma güvenliğinin bir sonucudur. Bu konuda çalışmak için uygulamanızın Info.plist dosyasını değiştirmeniz gerekiyor. Sen

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

bu özel etki alanı için bir istisna tanımlamak veya ATS tamamen

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

Bu sayfa faydalı bir görsel sunuyor: http://stackoverflow.com/a/33712228/1711103 –

3

sana, her şeyden önce bir esnek kodu oluşturmak gerektiğini düşünüyorum.

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