2014-11-21 77 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