Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果失败,iOS将运行两个异步方法_Ios_Asynchronous_Login - Fatal编程技术网

如果失败,iOS将运行两个异步方法

如果失败,iOS将运行两个异步方法,ios,asynchronous,login,Ios,Asynchronous,Login,我有一个场景,当我访问其他API时,如果授权令牌(relogin)过期,我需要再次静默刷新它,但我很难思考如何在不为每个API创建冗余代码的情况下对其进行编码,即使流程类似 当用户已过期身份验证令牌>呼叫付费API A(返回401 Unauthorized)>再次重新登录>呼叫付费API A(成功运行) 第二次调用付费API时,我很难用更少的代码和不陷入无限循环的陷阱。有没有像NSNotification center这样的方法对这种情况有用 注意:我需要从NetworkingLogin使用此格

我有一个场景,当我访问其他API时,如果授权令牌(relogin)过期,我需要再次静默刷新它,但我很难思考如何在不为每个API创建冗余代码的情况下对其进行编码,即使流程类似

当用户已过期身份验证令牌>呼叫付费API A(返回401 Unauthorized)>再次重新登录>呼叫付费API A(成功运行)

第二次调用付费API时,我很难用更少的代码和不陷入无限循环的陷阱。有没有像NSNotification center这样的方法对这种情况有用

注意:我需要从NetworkingLogin使用此格式的API

- (NSURLSessionDataTask *)getApiA:(CallbackBlock)block{

CallbackBlock _block = [block copy];

NSString *urlString = [[NSURL URLWithString:GET_API_A_URL relativeToURL:[NSURL URLWithString:HOME_URL]] absoluteString];

return [self GET:urlString parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
    NSDictionary *response = (NSDictionary *)responseObject;


    BLOCK_SAFE_RUN(block, response, nil, task);

} failure:^(NSURLSessionDataTask *task, NSError *error) {

    if([self unauthorizedAccess:task]){ //401
        ***//call Login once again > run getApiA again***
    }else if ([self forbiddenAccess:task]){ //403

    }


    BLOCK_SAFE_RUN(block, nil, error, task);
}];

}

如果我没弄错,你可以把它分成两种方法。再试一次,就给我一个教训。e、 g:

- (NSURLSessionDataTask *)getApiA:(id)block {
    NSString *urlString = [[NSURL URLWithString:GET_API_A_URL relativeToURL:[NSURL URLWithString:HOME_URL]] absoluteString];
    return [self doApiACallWithURL:urlString firstTry:YES completion:block];
}

- (NSURLSessionDataTask *)doApiACallWithURL:(NSString *)url firstTry:(BOOL)first completion:(CallbackBlock)completion {
    __weak typeof(self) wself = self;
    return [self GET:urlString parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
        NSDictionary *response = (NSDictionary *)responseObject;

        BLOCK_SAFE_RUN(block, response, nil, task);

    }        failure:^(NSURLSessionDataTask *task, NSError *error) {

        if ([wself unauthorizedAccess:task]) { //401
            if (first) {
                [wself doApiACallWithURL:url firstTry:NO completion:completion];
            }
        } else if ([wself forbiddenAccess:task]) { //403

        }

        BLOCK_SAFE_RUN(block, nil, error, task);
    }];
}
在大多数情况下,将弱自我用于块是一个好主意