NSURLSession dataTaskWithRequest未被调用

时间:2014-11-21 04:00:01

标签: swift nsurlsession

我有第二个NSURLSession直接从前一个的completionHandler调用(它取决于第一次调用生成的cookie)。它工作了一段时间,有时仍然有效,但大部分时间都没有。当我设置调试器时,它只是从dataTaskWithRequest行转到task.resume()调用之后的行。有什么想法吗?

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函数不会触发?

2 个答案:

答案 0 :(得分: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 :(得分:-1)

看起来它正在开火,我只是等待不够长。该函数返回到没有数据的调用函数,但那是因为NSURLSession还没有完成。我想我仍然可以解决NSURLSession的异步性问题。