2016-04-29 63 views
0

我正在嘗試創建一個漸進式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已完成,但顯然不是。任何人有任何想法,爲什麼會發生?

回答

0

代理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) 
    } 
} 

我希望這會幫助你。