2014-11-21 78 views
0

我有第二個NSURLSession被直接從前一個的completionHandler調用(它依賴於從第一次調用產生的cookie)。它工作了一段時間,有時仍然有效,但大部分時間沒有。當我通過調試器進行設置時,它只是從dataTaskWithRequest行到task.resume()調用的行。有什麼想法嗎?NSURLSession dataTaskWithRequest不被調用

func getDates() -> [NSDate] { 
    var urlDays = NSURL(string: "https://mycorrecturl.com") 
    var requestDays = NSMutableURLRequest(URL: urlDays!) 
    let sessionDays = NSURLSession.sharedSession() 

    // Create array of NSDate objects 
    var allDates = [NSDate]() 

    var task = sessionDays.dataTaskWithRequest(requestDays, completionHandler: {data, response, error -> Void in 

     // Convert into array of NSDate objects 

    }) 
    task.resume() 
    return allDates 
} 

爲什麼這個dataTaskWithRequest函數不會觸發?

回答

1

你面臨的問題是dataTaskWithRequest是一個異步調用,這就是爲什麼你收到一個空數組的原因(這只是完成並返回一個相同的時間,有時你會收到數據的機會)。

爲此,您需要使用一個閉包,它可以從dataTaskWithRequests的閉包中調用。

這樣的(這裏我只告訴你一個封閉的聲明方法):

func getDates (success:([NSDate])->Void){ 

而在你的網絡通話的身體:

var task = sessionDays.dataTaskWithRequest(requestDays, completionHandler: {data, response, error -> Void in 

    // Convert into array of NSDate objects 
    var yourArrayOfNSDateConverted:[NSDate] = [NSDate]() 
    success(yourArrayOfNSDateConverted) 
}) 

顯然yourArrayOfNSDateConverted包含您的過程中,數據,並且您還需要管理錯誤(爲此您可以添加另一個閉包)。

-1

看起來它是射擊,我只是沒有等待足夠長的時間。該函數沒有數據返回到調用函數,但那是因爲NSURLSession還沒有完成。我想我仍然得到NSURLSession的異步性質的掛鉤。

+0

你等了多久?我需要一段時間... – 2015-02-05 01:49:55

+0

一兩分鐘。但我認爲它有所不同 - 自從我工作以來,我一直沒有計時,整個計劃可能需要10分鐘以上,所以很難說。 – SyntheticGio 2015-03-08 04:07:34

+0

你是如何修復它的? – Kaptain 2015-09-08 16:20:50