2015-12-11 5 views
0

У меня есть данные «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?

И мое ограничение - это только эти методы, но я должен добавить код состояния ответа в ошибку ??

ответ

0

Похоже, вы передаете userInfo dict в NSError. Вы можете добавить этот словарь до создания возвращаемого NSError, а затем позже он будет доступен в обратном вызове NSError.