2015-07-19 40 views
1

我正在爲OS X編寫一個簡單的Twitter應用程序,目前我一直在下載用戶的配置文件圖像。這是負責下載圖像的代碼:NSURLSessionDataTask在簡單的HTTPS URL上失敗,錯誤-1002

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,可以導致一個完美有效的圖像。

但每當我跑我的應用程序中,println(error)行打印到這一點我的控制檯:

可選(錯誤域= NSURLErrorDomain代碼= -1002「的操作無法完成(NSURLErrorDomain錯誤-1002 。)」的UserInfo = 0x61000006ea80 {NSErrorFailingURLStringKey =可選(https://pbs.twimg.com/profile_images/618168482086129664/C0E92y7G.png),NSUnderlyingError = 0x600000243720 「該操作不能完成。(kCFErrorDomainCFNetwork錯誤-1002。)」,NSErrorFailingURLKey =可選(https://pbs.twimg.com/profile_images/618168482086129664/C0E92y7G.png)})

上午我做錯了什麼?我已經搜索了這個(幾乎所有的詞),幾乎我找到的每一個SO頁面都有一個解決方案,基本上等於「您的URL缺少URL方案/具有不支持的URL方案」,這不是問題我有。

+0

嗯,這段代碼對我來說工作得很好(除了對'println'的好奇引用,它不再在Swift 2中使用)。你可能想仔細檢查你的URL,確保沒有任何空格或怪異的,不可見的字符。 – Rob

+0

奇怪。我只是手動輸入網址以確保我沒有複製任何隱形字符,仍然沒有。另外,'println'是我寫的一個包裝函數,它只是再次調用'print',使它在'NSWindow'子類中工作。 –

+0

其實,從頭開始。我剛剛清除了所有Xcode的緩存,現在它在將URL手動粘貼到代碼中時起作用。通常情況下,我會從Twitter的API獲取網址,這是停止工作併產生上述錯誤的時候。什麼 –

回答

1

我終於想出瞭如何解決這個問題。之前,我只是懶洋洋地這樣做:

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

這顯然會返回一個可選不能用感嘆號來解開。是的,我也不知道。這就是發生了什麼事。

現在,我這樣做:

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

...這實際上產生一個適當的String對象,而不是一些奇怪不,相當 - 可選。 Hooray使用測試版的編程語言。

+0

這並不是說它是一個「不完全可選」,而是它是一個非可選的,它由字符串'Optional'(在開始和')'末尾的字符串組成。看看字符串的長度,你會發現'Optional('和')'實際上是字符串的一部分!這是因爲它對可選的字符串進行了字符串插值。如果你使用了'String(responseObject [「profile_image_url_https」]!)'(解開由下標函數_before_返回的選項傳遞給'String'構造函數,這將防止這種情況的發生。你在上面的回答中顯示了 – Rob

+0

展開String構造函數內部的對象沒有任何作用 –

+0

OK。它爲我工作,所以一定還有其他事情正在進行。不過,你有另一種解決方案,所以這很好。 – Rob

相關問題