2015-01-02 35 views
0

我打電話這行代碼:NSURLSession與離線URL

let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in 
    ... 
} 

task.resume() 

,但我想處理時,URL處於脫機狀態,當我沒有從服務器接收回信息。

我不知道該怎麼做,因爲調用taskWithURL的過程永遠不會停止,它會一直嘗試與服務器連接。

有誰知道如何處理它?

** //////////////////////// ///////////

具有這種硬代碼,我解決我的問題 **

if data != nil { 
    var urlContent = NSString(data: data!, encoding: NSUTF8StringEncoding) 
    if urlContent?.length > 0 { 
     ... 
    }else { 
     ... 
    } 
}else{ 
    ... 
} 

這不是一個很好的代碼,但解決我的問題現在。

回答

1

您需要爲其添加完成塊。 只需創建一個函數來啓動你下載:

func getDataFromUrl(url:NSURL, completion: ((data: NSData?) -> Void)) { 
    NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) in 
     completion(data: NSData(data: data)) 
    }.resume() 
} 

然後,你必須使用dispatch_async(dispatch_get_main_queue())

getDataFromUrl(NSURL(string: "http://.....")!) { data in 
    dispatch_async(dispatch_get_main_queue()) { 
     println("Finished downloading") 
     // you can use the data! here 
     if data != nil { 
      // there is data. do this 
     } else { 
      // there is no data. do that 
     } 

    } 
} 
+0

萊昂納多,它並沒有解決我的問題。 我仍然不知道是否從網址的數據返回的東西不是什麼都沒有 –

+0

但我想改變視圖,如果數據沒有返回.. Brs no堆hahah –

+0

@GabrielAraujo如果你想知道什麼時候你沒有得到任何回報,只需使用響應或錯誤變量來檢查。例如,如果您的連接超時,則會出現此錯誤。 –