NSURLConnection的渐进式JPG下载

问题描述:

我正在尝试创建一个渐进式JPG加载器。当一张大图像传入我的NSURLConnection时,它似乎将图像的一半切掉。NSURLConnection的渐进式JPG下载

这是我didReceiveData方法和图像数据被分配到:

func connection(connection: NSURLConnection!, didReceiveData data: NSData!){ 
    if let img: UIImage = UIImage(data: data){ 
     imageView.image = img 
    } 
    print("didReceiveData") 
} 

似乎跳过数据的最后一个块,完成图像。一个例子形象是:

Greyed image

该图像传递给connectionDidFinishLoading已完成,但显然不是。任何人有任何想法,为什么会发生?

代理optional public func connection(connection: NSURLConnection, didReceiveData data: NSData)假设是回调来递增加载数据。每次被调用时,您都会收到新的可用数据。因此,如果您尝试使用接收到的数据设置创建图像,它将不会是完整的图像。相反,你应该试试这个

@IBOutlet weak var imageView: UIImageView! 
    var receivedData = NSMutableData() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     let imageURL = "https://www.nasa.gov/sites/default/files/styles/full_width_feature/public/thumbnails/image/leisa_christmas_false_color.png?itok=75o-jlD5"; 
     let request = NSURLRequest(URL: NSURL(string: imageURL)!) 
     let urlConnection = NSURLConnection(request: request, delegate: self, startImmediately: true) 
     urlConnection?.start() 
    } 

extension ViewController: NSURLConnectionDelegate, NSURLConnectionDataDelegate { 

    func connection(connection: NSURLConnection, didReceiveData data: NSData) { 
     self.receivedData.appendData(data) 
    } 

    func connectionDidFinishLoading(connection: NSURLConnection) { 
     self.imageView.image = UIImage(data: receivedData) 
    } 
} 

我希望这会帮助你。