Swift:NSData(contentsOfURL)在XCode 6.1上崩溃

问题描述 投票:2回答:2

在升级到XCode6.1之前,我使用的方法是NSData.dataWithContents(),它完美地运行了所有下载的图像。今天我已更新到XCode 6.1,它迫使我使用这样的函数:

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

当我运行应用程序时,它会在消息上崩溃:

致命错误:在展开Optional值时意外发现nil

我尝试了很多东西,但没有任何作用。我正在寻找任何简单的替代方案来从给定的URL下载图像。

swift xcode6.1
2个回答
7
投票

由于NSURL的初始化可能由于多种原因而失败,因此您应该更好地使用它:

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

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

它工作得非常好,并且它可以让您更好地控制请求。

© www.soinside.com 2019 - 2024. All rights reserved.