Ios 如何向错误中添加状态代码?

Ios 如何向错误中添加状态代码?,ios,iphone,json,afnetworking,nserror,Ios,Iphone,Json,Afnetworking,Nserror,我有一个带有不同状态代码的“JSON”数据,如图所示,我使用的是“AFHTTPSessionManager”,如果我们调用API,我会得到200作为成功代码,除了响应对象中的代码之外,我还有状态代码,所以我想根据状态代码执行不同的操作,为此我编写了如下代码 -(void)validateOTP:(NSString *)OTP andUserID:(NSString *)userID withCompletion:(void(^)(NSDictionary* dictionary, 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];

}
如您所见,即使在成功处理程序中,我也在传递错误并调用我们创建的category方法

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;
}
在这里,我想使用我作为参数传递给这个方法的状态码,这样我就可以在调用这个方法的地方得到状态码

[[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. 
    }];
因此,在这个方法中,如果不是成功代码,我可以得到响应状态代码。正如您在图像中看到的,第一个响应是成功的,其余的是错误响应

我知道我可以在category方法中使用statusCode,但是我不知道如何使用它,如果我在category方法中存储这个状态代码,作为参数传递给这些方法,那么我可以在任何需要的地方调用它们,如何得到它


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

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