我创建了一个继承自AFHTTPSessionManager的网络管理器类,我在类中定义了GET,POST等方法。这是POST实现 -
- (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调用。
我可以直接拨打方法调用代替最后一条评论吗?或者还有其他更好的方法吗?
答案 0 :(得分:0)
在这个块中你仍然可以访问当前的调用参数,因为它是由block捕获的。只需使用[self performPOSTRequestToURL:postURL ...]调用具有相同参数的当前方法。