get responseObject on failure block AFNetworking 3.0 get responseObject on failure block AFNetworking 3.0 ios ios

get responseObject on failure block AFNetworking 3.0


Just do this in your failure block:-

 NSString* errResponse = [[NSString alloc] initWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] encoding:NSUTF8StringEncoding];NSLog(@"%@",errResponse);

For Swift:-

var errResponse: String = String(data: (error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] as! NSData), encoding: NSUTF8StringEncoding)NSLog("%@", errResponse)

Updated for Swift 4.1

var errResponse: String = String(data: (error._userInfo![AFNetworkingOperationFailingURLResponseDataErrorKey] as! Data), encoding: String.Encoding.utf8)!print(errResponse)


I have found a solution for this which works perfectly. In swift

if let userInfo : NSDictionary = error.userInfo as NSDictionary {     if let innerError : NSError = userInfo.objectForKey("NSUnderlyingError") as? NSError {         if let innerUserInfo : NSDictionary = innerError.userInfo as NSDictionary {              if innerUserInfo.objectForKey(AFNetworkingOperationFailingURLResponseDataErrorKey) != nil {                   let StrError = NSString(data: innerUserInfo.objectForKey(AFNetworkingOperationFailingURLResponseDataErrorKey) as! NSData, encoding: NSUTF8StringEncoding)                   print(StrError)              }         } else if let errResponse: String = String(data: (error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] as! NSData), encoding: NSUTF8StringEncoding) {              print(errResponse)         }     }}

and Objective-C code is

    NSDictionary *userinfo1 = [[NSDictionary alloc] initWithDictionary:error.userInfo];if(userinfo1) {      NSError *innerError = [userinfo1 valueForKey:@"NSUnderlyingError"];      if(innerError) {         NSDictionary *innerUserInfo = [[NSDictionary alloc] initWithDictionary:innerError.userInfo];         if(innerUserInfo)         {              if([innerUserInfo objectForKey:AFNetworkingOperationFailingURLResponseDataErrorKey])              {                   NSString *strError = [[NSString alloc] initWithData:[innerUserInfo objectForKey:AFNetworkingOperationFailingURLResponseDataErrorKey] encoding:NSUTF8StringEncoding];                            NSLog(@"Error is : %@",strError);              }         }      } else      {           NSString *errResponse = [[NSString alloc] initWithData:[userinfo1 valueForKey:@"AFNetworkingOperationFailingURLResponseDataErrorKey"] encoding:NSUTF8StringEncoding];          if(errResponse)          {               NSLog(@"%@",errResponse);          }      }}


- (void)requestWithURL:(NSString *)url parameterDictionary:(NSMutableDictionary *)data  requestType:(NSString *)reqType  handler:(NSObject *)handler selector:(SEL)selector{  // reqType is POST or GET  // handler would be self if you define selector method in same class  AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];  NSMutableURLRequest *req = [[AFJSONRequestSerializer serializer] requestWithMethod:reqType URLString:[NSString stringWithFormat:@"%@",url] parameters:nil error:nil];req.timeoutInterval= [[[NSUserDefaults standardUserDefaults] valueForKey:@"timeoutInterval"] longValue];[req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];[req setValue:@"application/json" forHTTPHeaderField:@"Accept"];if (data != nil) {    NSLog(@"Data is not nil");    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:data options:0 error:&error];    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];    [req setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];}else{    NSLog(@"Data is nil");}[[manager dataTaskWithRequest:req completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {    if (!error) {//            NSLog(@"Reply JSON: %@", responseObject);        [handler performSelector:selector withObject:responseObject];        if ([responseObject isKindOfClass:[NSDictionary class]]) {            //blah blah        }    } else {        NSLog(@"Error: %@, %@, %@", error, response, responseObject);        [handler performSelector:selector withObject:responseObject];    }}] resume];}