[英]Cancel a download of NSData contentsOfUrl
我有這個課下載圖像。 但是我有一個情況,我有多個使用此類的視圖將圖像下載到它們。 這些視圖是動態的,可能在下載完成之前隨時消失。
為避免錯誤,如果使用該視圖的視圖消失了,我將如何修改此類以取消下載?
class ImageDownloader{
var spinner = UIActivityIndicatorView()
func fetchImage(imageView: UIImageView, url:NSURL, completed: (success: Bool) ->()) {
self.spinner.frame = CGRectMake((imageView.frame.width-35)/2, (imageView.frame.height-35)/2, 35, 35)
imageView.addSubview(self.spinner)
self.spinner.startAnimating()
let qos = Int(QOS_CLASS_USER_INITIATED.rawValue)
dispatch_async(dispatch_get_global_queue(qos, 0)) { () -> Void in
let imageData = NSData(contentsOfURL: url) // this blocks the thread it is on
dispatch_async(dispatch_get_main_queue()) {
self.spinner.removeFromSuperview()
if imageData != nil {
imageView.image = UIImage(data: imageData!)
completed(success: true)
}else{
completed(success: false)
}
}
}
}
}
經過大量研究之后,看來NSURLSession確實是我想要實現的目標。 我很難找到與此有關的任何體面的教程或示例,這真是令人驚訝。 我最終從這里到那里的swift和Objective-c代碼片段進行編譯。
class imageDownloader:NSURLSession, NSURLSessionDelegate, NSURLSessionDownloadDelegate{
var session:NSURLSession!
var imageView:UIImageView!
var task = NSURLSessionDownloadTask()
var spinner = UIActivityIndicatorView()
override init() {
super.init()
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
self.session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)
}
func getImage(url:NSURL,imageView:UIImageView){
self.imageView = imageView
self.task = session.downloadTaskWithURL(url)
self.spinner.frame = CGRectMake((imageView.frame.width-35)/2, (imageView.frame.height-35)/2, 35, 35)
imageView.addSubview(self.spinner)
self.spinner.startAnimating()
self.task.resume()
}
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
let data = NSData(contentsOfURL: location)
dispatch_async(dispatch_get_main_queue()) { () -> Void in
self.spinner.removeFromSuperview()
self.imageView.image = UIImage(data: data! )
}
}
func cancel(){
self.task.cancel()
}
}
如您所見,錯誤處理方式不多。 誰能建議如何改進它以包含此內容?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.