2014-10-22 55 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