NSURLSession 3xx重定向和完成处理程序

时间:2016-06-03 18:05:31

标签: ios swift macos nsurlsession foundation

我有一个dataTask + completionHandler方法从Web服务器下载数据。到目前为止,我已经实现了这个:

let task = session.dataTaskWithURL(url, completionHandler: {
        (pageData,response,error) in
...
...
let code = urlHttpResponse.statusCode
switch code {
case 200:
     self.fetchedPages.updateValue(pageData, forKey: pageNumber)
case 404:
    self.fetchedPages.updateValue(nil, forKey: pageNumber) //No data exists for that page
default:
    self.fetchedPages.updateValue(nil, forKey: pageNumber) //No gurantee data exists for that page
}
NSNotificationCenter.defaultCenter().postNotificationName("pageDataDownloaded", object: self, userInfo: ["numberForDownloadedPage":pageNumber])

我想知道如果statusCode是3xx错误会发生什么? pageData是否包含重定向位置的数据?换句话说,我应该添加

case _ where code >= 300 && code < 400:
    self.fetchedPages.updateValue(pageData, forKey: pageNumber)

或者是否会使用包含重定向位置的值的pageData和新的200状态代码再次调用处理程序?或者正在处理重定向,我只能使用委托吗?

1 个答案:

答案 0 :(得分:5)

如果您没有代表或代理人没有实施URLSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:),则会自动遵循HTTP重定向。在这种情况下,您无法在处理程序中看到30x状态。