【问题标题】:Swift: NSData(contentsOfURL) crashing on XCode 6.1Swift:NSData(contentsOfURL) 在 XCode 6.1 上崩溃
【发布时间】:2014-10-22 11:36:05
【问题描述】:

在升级到 XCode6.1 之前,我使用的是 NSData.dataWithContents() 方法,它运行良好,所有图像都在下载。今天我已经更新到 XCode 6.1,它迫使我使用这样的功能:

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

当我运行应用程序时,它会崩溃并显示消息:

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

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

【问题讨论】:

    标签: swift xcode6.1


    【解决方案1】:

    由于NSURL 的初始化可能由于多种原因而失败,因此您最好以这种方式使用它:

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

    【讨论】:

    • 感谢您的回复,但我已经用比这更好的方法做到了。
    【解决方案2】:

    更好的下载文件方法是:

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

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

    【讨论】:

    • 请注意,如果 URL 失败,NSURL(..)! 可能会导致您的应用崩溃。
    • 感谢您分享信息。
    • 如果您正在寻找在您的应用程序中下载文件的最佳(易于扩展和“控制”)方式,您应该考虑使用 NSOperation。 Swift 中的好例子在这里:raywenderlich.com/76341/use-nsoperation-nsoperationqueue-swift
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    相关资源
    最近更新 更多