如何将状态代码添加到错误中?

时间:2015-12-11 14:50:41

标签: ios iphone json afnetworking nserror

我有一个带有不同状态代码的'JSON'数据,如图所示,我正在使用'AFHTTPSessionManager',如果我们调用API,我获得200作为成功代码,除了我的响应对象中的那个有状态代码所以我想根据状态代码做不同的操作,为此我写了这样的代码..

-(void)validateOTP:(NSString *)OTP andUserID:(NSString *)userID withCompletion:(void(^)(NSDictionary* dictionary, NSError* error))completion   
{

    UTValidateOTPRequest *request = [UTValidateOTPRequest validateOTPRequestWithOTP:OTP andUserID:userID];

    NSDictionary *paramDict = [request dictionaryRepresentation];

    NSURLSessionDataTask *task = [self postRequestToResouce:[NSString stringWithFormat:@"%@/ValidateOTP",kServerCommonEndPoint] arguments:paramDict successHandler:^(NSDictionary *response) {

        NSNumber *statusCode = response[kStatusCodeKey];

        if (statusCode.integerValue == UTStatusCodeSuccess) {
            completion(response, nil);
        }

        else {
            NSError *error = [NSError mapStatusCodeToError:statusCode.integerValue details:response];

            completion(nil, error);

        }
    } errorHandler:^(NSError *error) {
        NSError *newError = [NSError mapStatusCodeToError:error.code details:error.userInfo];

        completion(nil, newError);

    }];

    [self addDataTask:task];

}

正如您所看到的,即使在成功处理程序内部,我也会传递错误并调用我们创建的类别方法。

NSError *error = [NSError mapStatusCodeToError:statusCode.integerValue details:response];

此方法实现如下

+ (NSError *)mapStatusCodeToError: (NSInteger)statusCode details:(NSDictionary*) errorInfo
{
    NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
    NSString *domain = [bundleIdentifier stringByAppendingString:kErrorDomainKey];
    NSString *errorMessage = nil;
    if (errorInfo[kErrorMessageKey] && ![errorInfo[kErrorMessageKey] isEqualToString:kEmptyString]) {
        errorMessage = errorInfo[kErrorMessageKey];
    }
    else{
        // use common message
        errorMessage = kInternetNotAvailableMessage;
    }
    NSDictionary *userInfo = @{NSLocalizedDescriptionKey:NSLocalizedString(errorMessage, nil)};
    NSLog(@"User INFO : %@",userInfo);

    NSError *internetUnavailableError = [NSError errorWithDomain:domain
                                                            code:NSURLErrorNotConnectedToInternet
                                                        userInfo:userInfo];

    NSLog(@"Error Code : %ld",(long)internetUnavailableError.code);
    return internetUnavailableError;
}

这里我想使用我作为参数传递给此方法的statusCode,以便我可以获取我调用此方法的状态代码

[[UTServerManager sharedInstance] validateOTP:self.enterOTPText.text andUserID:self.userId withCompletion:^(NSDictionary *dictionary, NSError *error) {
       // Here I want to get the status code of error not like -1009 , but what ever statusCode that I'm getting from the API response. 
    }];

所以在这个方法中我可以得到响应状态代码,如果它不是成功代码意味着你在第一个响应中的图像中看到的是成功,剩下的是错误响应。

我知道我可以在类别方法中使用statusCode,但我不知道如何使用它,如果我将此状态代码存储在上面的错误的类别方法中,我将作为参数传递给然后我可以在任何需要的地方调用它们如何获得这个enter image description here

我的限制是我应该只使用这些方法,但我必须将响应状态代码添加到错误??

1 个答案:

答案 0 :(得分:0)

看起来您正在将userInfo dict传递给NSError。您可以在创建要返回的NSError之前添加到此字典中,然后在NSError回调中将它可用。