2017-06-28 2 views
1

は、コードのこの部分を検討:URLSession dataTask NSURLErrorをどのように解読できますか?

func load(url: URL?, callback: ((UIImage?) -> Void)? = nil) -> UIImage? { 
    guard let url = url else { 
     return nil 
    } 

    if let image = cache[url] { 
     return image 
    } 
    guard let callback = callback else { 
     return nil 
    } 
    var request = URLRequest(url: url) 
    request.httpMethod = "GET" 
    let config = URLSessionConfiguration.default 
    config.timeoutIntervalForRequest = 10 
    let session = URLSession(configuration: config, delegate: nil,   delegateQueue: OperationQueue.main) 
    let task = session.dataTask(with: request) { data, response, error in 
     guard let data = data else { 
      return 
     } 
     DispatchQueue.global().async { 
      let image = UIImage(data: data) 
      DispatchQueue.main.async { 
       self.cache[url] = image 
       callback(image) 
      } 
     } 
    } 
    task.resume() 
    return nil 
} 

を我々はゼロとエラーが解読不能NSURLErrorのいくつかの並べ替えであるようsession.dataTaskdataが返されている問題に遭遇してきました。それをデバッグしても、問題の原因は何もわかりません。私たちは、いくつかのURLが動作しているかどうかを判断することができましたが、どこに問題があるのか​​は不明です。問題の

URLはこれです:これは私がエラーをコピーから得るものです

http://website.com////assets//P//wa//_resampled//paddedimage400400-apicture.gif 

、これは何かが、URLが間違っていることを改めて強調し:

error Error? (instance_type = 0x0000608000246930 -> 0x0000000106a2ff48 (void *)0x0000000106a2ff20: NSURLError) some 

作品のURL

https://api.website.com/assets/P/wa/_resampled/picture.jpg 

私は明らかに両方のURLに違いがありますが、私はcです両方ともブラウザで作業し、画像を正しく表示することを確認してください。

誰かがNSURLErrorを解読する方法を知っていますか、それとも読みやすい形式にする方法はありますか?

もしそうでなければ、NSURLが動作し、私たちが違反しているかもしれないフォーマットの仕様を誰かが持っていますか?

+0

アップルフレームワークによってスローされた 'NSError'インスタンスには、' domain'、エラー 'code'とローカライズされた記述(' localizedDescription')があります。 – vadian

+0

イメージをダウンロードするコードを書く必要はありません。ここに素晴らしいライブラリhttps://github.com/rs/SDWebImageがあります。これを使って! – Parimal

+0

@vadianありがとうございました。実際には役に立ちました。 \t 'App Transport Securityポリシーがセキュア接続を必要とするため、リソースをロードできませんでした。 ' – Nico

答えて

0

errorがnilでないかどうかを確認して、NSErrorにキャストできます。

if let error = error { 
    let nsError = error as NSError 
    print(nsError.domain) 
    print(nsError.code) 
    print(nsError.localizedDescription) 
    // ... check additional properties 
} 
+0

また悪くないが、 'localizedDescription'はすべてだった – Nico

関連する問題