如何从同一方法的故障块调用iOS方法?

时间:2016-07-22 19:05:42

标签: ios objective-c afnetworking objective-c-blocks

我创建了一个继承自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调用。

我可以直接拨打方法调用代替最后一条评论吗?或者还有其他更好的方法吗?

1 个答案:

答案 0 :(得分:0)

在这个块中你仍然可以访问当前的调用参数,因为它是由block捕获的。只需使用[self performPOSTRequestToURL:postURL ...]调用具有相同参数的当前方法。