【发布时间】:2015-12-11 14:50:41
【问题描述】:
我有一个具有不同状态代码的“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.
}];
因此,在此方法中,如果不是成功代码,我可以获取响应状态代码,这意味着您在图像中看到的第一个响应是成功,其余的是错误响应。
而且我知道我可以在类别方法中使用状态代码,但我不知道如何使用它,如果我将这个状态代码存储在类别方法中以用于上述错误,我将作为参数传递给这些方法然后我可以在需要的地方调用它们如何获得这个?
我的限制是我应该只使用这些方法,但我必须将响应状态代码添加到错误中??
【问题讨论】:
标签: ios iphone json afnetworking nserror