我开发了一个应用程序,它请求 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 但我没有找到我要找的东西。
最佳答案
你可以这样做:
- 你正在发送请求,我假设是异步的。
- 其中一个请求收到一个
session expired
。 - 您设置一个静态变量,例如
static BOOL isRetrievingNewToken
为YES
。您创建一个静态队列,其中包含在收到新 token 后要调用的 block ,您使用收到session expired
的请求调用对其进行初始化。如果在isRetrievingNewToken==YES
时收到新请求,则将其放入队列。如果另一个请求收到session expired
,您将其放入队列。 - 当您收到新 token 时,您将执行队列中的所有 block ,删除项目,并将
isRetrievingNewToken
设置为NO
。
根据它的外观,在连接类 NVURLConnection
中实现此行为可能是个好主意。
关于ios - 处理 session 过期的 iOS HTTPRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26775753/