サーバーから画像をダウンロードし、アプリ内に表示する必要があります。私はURLSessionDownload
プロトコルを使用して、ダウンロードのステータスとすべてのプロセスの進行状況を取得します。これは私のコードです:URLSessionDownloadを使用して画像をダウンロードする方法は?
var downloadBGTask: URLSessionDownloadTask!
var downloadBGSession: URLSession!
override func viewDidLoad() {
super.viewDidLoad()
self.downloadBGSession = {
let downloadBGSessionConfig = URLSessionConfiguration.background(withIdentifier: "downloadBGSession")
return URLSession(configuration: downloadBGSessionConfig, delegate: self, delegateQueue: OperationQueue.main)
}()
self.downloadBGTask = self.downloadBGSession.downloadTask(with: "http.. ETC .png")
self.downloadBGTask.resume()
}
プロトコル
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64){
self.loadingLabel.text = "Loading (\((Float(totalBytesWritten)/Float(totalBytesExpectedToWrite)) * 100)%)"
}
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
print("Download Completed")
// How do I get the image I downloaded?
// This code below doesn't even compile
self.randomImg.image = UIImage(data: downloadTask.response!)
}
任意のアドバイスはありますか?
あなたは完全に右!私は無意味な何かをやっている!私の最初の目標をアニメーションが始まる前に画像をダウンロードして表示しようとしていましたが、接続が悪い(おそらくタイムアウトの場合)対処方法がわかりませんでした – user3582537
@ user3582537 - バックグラウンドセッションの導入ははるかに複雑です。これらのメソッドでは 'Data'または' URL'が 'nil'ではないか、' Error'リファレンスが 'nil 'であるかどうかをチェックするだけです'しかし、うまくいけば私はあなたにダウンロードタスクのためにあなたに返される「URL」。 – Rob
ありがとう!私はこの方法を選択しました。なぜなら、完了したdataTaskを使用したとき、それは「完了」ブロックと呼ばれましたが、ダウンロードされたイメージを表示する前に約2/3秒かかったからです。しかし、おそらく私は別の質問を投稿する必要があります。あなたの助けと忍耐ありがとう – user3582537