ios - 处理 session 过期的 iO​​S HTTPRequest

标签 ios cocoa-touch nsurlconnection

我开发了一个应用程序,它请求 token 来执行所有 HTTPRequest。 我在一个名为 NVEngine 的类中处理所有 100 个不同的请求,我称它们为:

- (void) sendRequest:(NSURLRequest *)theRequest withRequestType:(NVRequestType)requestType {    
   NVURLConnection *conn = [[NVURLConnection alloc] initWithRequest:theRequest 
                                                        delegate:self
                                                     requestType:requestType];

   if (!conn) {     
    NVLog(@"+++++++++++++++++++++++ UNABLE TO CREATE CONNECTION");      
   }
}

问题是此请求的结果可能是“ session 已过期”,在这种情况下,我必须重新验证 http 请求以刷新 token ,然后在没有用户交互的情况下重新调用相同的先前请求。如何在我的 sendRequest 方法上管理回调?从 - (void) parseResultForConnection:(NVURLConnection *)connection 一个?如果我可以在 sendRequest 上返回,我可以首先执行同步请求以检索新 token ,然后重试我之前的 HTTPCall。

PS:我已经看到关于这个主题的一些答案,例如 Session expire design pattern 但我没有找到我要找的东西。

最佳答案

你可以这样做:

  1. 你正在发送请求,我假设是异步的。
  2. 其中一个请求收到一个session expired
  3. 您设置一个静态变量,例如 static BOOL isRetrievingNewTokenYES。您创建一个静态队列,其中包含在收到新 token 后要调用的 block ,您使用收到 session expired 的请求调用对其进行初始化。如果在 isRetrievingNewToken==YES 时收到新请求,则将其放入队列。如果另一个请求收到 session expired,您将其放入队列。
  4. 当您收到新 token 时,您将执行队列中的所有 block ,删除项目,并将 isRetrievingNewToken 设置为 NO

根据它的外观,在连接类 NVURLConnection 中实现此行为可能是个好主意。

关于ios - 处理 session 过期的 iO​​S HTTPRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26775753/

相关文章:

iphone - 在字符串中存储单词的优雅算法

objective-c - Cocoa:使用相同的委托(delegate)函数检查多个异步 NSURLConnections 是否需要?

ios - 从 xcode 外部在 iOS 应用程序中添加框架

javascript - iOS 8.1.3 上的 Bootstrap 模式问题

ios - 应用程序进入后台时使计时器无效

关于 NSString NSInteger 和方法调用的 Objective-C 问题

ios - 点击返回时保存更改 - Swift

objective-c - NSUndoManager 使用旋转手势撤销 UIImage 旋转

ios - 当应用程序处于后台时,如何在iOS应用程序中获得Web服务响应?

iphone - 检查网站上的文件是否存在