NSURLSessionDataTask 在简单 HTTPS URL 上失败,错误为 -1002

NSURLSessionDataTask fails on simple HTTPS URL with error -1002

我正在为 OS X 编写一个简单的 Twitter 应用程序,目前我无法下载用户的个人资料图片。这是负责下载图片的代码:

let imageRequest: NSURLRequest = NSURLRequest(URL: NSURL(string: avatarURL)!)
let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
let dataTask = session.dataTaskWithRequest(imageRequest) {
    (data, response, error) in

    println(error)

    if data != nil {
        println("Got image")
        let image = NSImage(data: data!)
        completion(image)
    } else {
        println("Data is nil")
        completion(nil)
    }
}
dataTask!.resume()

avatarURL 是一个包含以下内容的字符串:https://pbs.twimg.com/profile_images/618168482086129664/C0E92y7G.png,这是我的 Twitter 头像的 URL。如您所见,它是一个完全有效的 URL 导致一个完全有效的图像。

但是每当我 运行 我的应用程序时,println(error) 行都会将其打印到我的控制台中:

Optional(Error Domain=NSURLErrorDomain Code=-1002 "The operation couldn’t be completed. (NSURLErrorDomain error -1002.)" UserInfo=0x61000006ea80 {NSErrorFailingURLStringKey=Optional(https://pbs.twimg.com/profile_images/618168482086129664/C0E92y7G.png), NSUnderlyingError=0x600000243720 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1002.)", NSErrorFailingURLKey=Optional(https://pbs.twimg.com/profile_images/618168482086129664/C0E92y7G.png)})

我是不是做错了什么?我已经用谷歌搜索了这个(多好的一个词),我发现的几乎每个 SO 页面都有一个基本上相当于 "Your URL is missing an URL scheme/has an unsupported URL scheme" 的解决方案,这不是我遇到的问题。

我终于想出了解决办法。之前,我只是懒洋洋地这样做:

var avatarURLString = String(responseObject["profile_image_url_https"])

这显然是 returns 一个不能用感叹号打开的 Optional。是的,我也不知道。就是这么回事。

现在,我这样做:

var avatarURLString = responseObject["profile_image_url_https"] as! String

...这实际上产生了一个合适的 String 对象,而不是一些奇怪的不太可选的对象。万岁使用编程语言的测试版。