我已经创建了一个继承自AFHTTPSessionManager的网络管理器类,并且已经为该类中的GET,POST等定义了方法。这里是POST实现 -如何从相同方法的失败块中调用iOS方法?
- (NSURLSessionTask*)performPOSTRequestToURL:(NSString*)postURL andParameters:(NSDictionary*)parameters withCompletionBlock:(WebServiceCompletionResponse)completionBlock {
[self POST:postURL parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
/* Token is still valid, got success response/data */
if (completionBlock) {
completionBlock(responseObject);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if ([error code] == SESSION_EXPIRED_CODE) { /* Token has expired because error code is SESSION_EXPIRED_CODE */
/* Make call to refresh token */
[[TokenLibrary sharedInstance] refreshToken:^(NSError *error, NSString *token) {
if (error) {
completionBlock(error);
}
else{
/* Got refreshed token, I want to call performPOSTRequestToURL with the same url now. How do I do it? Is the call below okay? */
[self performPOSTRequestToURL:postURL andParameters:parameters withCompletionBlock:completionBlock];
}
}];
}
}];
}
我在上面的最后一条评论中提出了我的问题。
基本上,我让网络调用发布或获取数据,如果有一个SERVER_EXPIRED_CODE作为错误响应,我从webservice获得,我需要先刷新令牌,然后再次进行相同的API调用。
我可以直接进行方法调用而不是最后的评论吗?或者有另一种或更好的方法来做到这一点?
是的,你是在正确的轨道上,这是一个干净的方式来回忆一旦你成功刷新令牌api。 – AtWork
@AWork感谢您的快速回复。我编辑了代码块以实际进行调用 - [self performPOSTRequestToURL:postURL andParameters:parameters withCompletionBlock:completionBlock];这看起来好吗? – letsbondiway
看起来很好,我应该工作。你尝试过运行它吗? – AtWork