【问题标题】:NSURLSession 3xx redirects and completion handlersNSURLSession 3xx 重定向和完成处理程序
【发布时间】:2016-06-05 11:22:43
【问题描述】:

我有一个 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 状态代码?还是我只能使用委托才能正确处理重定向?

【问题讨论】:

    标签: ios swift macos nsurlsession foundation


    【解决方案1】:

    如果您没有委托或委托未实现URLSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:),则会自动遵循 HTTP 重定向。在这种情况下,您不会在处理程序中看到 30 倍的状态。

    【讨论】:

      猜你喜欢
      • 2015-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      相关资源
      最近更新 更多