我有第二个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函数不会触发?
答案 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的异步性问题。