2014-10-22 21 views
2

在升級到XCode6.1之前,我使用的是NSData.dataWithContents()方法,它完美地工作在所有的圖像下載。今天,我已經更新到了XCode 6.1,它迫使我使用這樣的功能:Swift:NSData(contentsOfURL)在XCode 6.1上崩潰

NSData(contentsOfURL: NSURL(string: completeUrl)!)! 

,當我運行該應用程序崩潰它與消息:

fatal error: unexpectedly found nil while unwrapping an Optional value

我已經嘗試了很多東西但沒有任何工作。我正在尋找任何簡單的替代方法來從給定的URL下載圖像。

回答

7

由於NSURL的initalization可能會失敗,原因有很多,你應該更好地使用這種方式:

if let url = NSURL(string: completeUrl) { 
    if let data = NSData(contentsOfURL: url) { // may return nil, too 
     // do something with data 
    } 
} 
+0

感謝您的回覆,但我已經用更好的方式完成了這個任務。 – 2014-10-22 11:56:21

1

更多更好的方式來下載文件是:

let request:NSURLRequest = NSURLRequest(URL: NSURL(string: completeUrl)!) 
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: { (response:NSURLResponse!, imageData:NSData!, error:NSError!) -> Void in 
    var filePath:String = pathString + "/" + fileName 
    imageData.writeToFile(filePath, atomically: true) 
}) 

這是工作非常漂亮還可以讓您更好地控制請求。

+2

請注意,如果URL失敗,'NSURL(..)!'可能會導致應用程序崩潰。 – zisoft 2014-10-22 12:48:13

+0

Thankyou分享信息。 – 2014-10-22 12:49:15

+1

如果您正在尋找最適合您的應用程序下載文件的最佳方式(易於擴展並可應要求提供「控制」),則應考慮使用NSOperation。 Swift中的好例子在這裏:http://www.raywenderlich.com/76341/use-nsoperation-nsoperationqueue-swift – 2014-10-22 15:53:29