获取失败块AFNetworking 3.0上的responseObject

Ale*_*him 25 objective-c ios afnetworking afnetworking-3

如何从AFNetworking 3.x中的故障块获取响应字符串,

在2.x版本中,这样做的方法是:

[manager GET:path parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSDictionary *dictionary_FetchResult = responseObject;
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSDictionary *dictionary_FetchResult = operation.responseObject;
}];
Run Code Online (Sandbox Code Playgroud)

但是在3.x版本中,返回块的参数中没有操作,如下所示:

[manager POST:path parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    NSDictionary *dictionary_FetchResult = responseObject;
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    NSLog(@"Error: %@", error);
}];
Run Code Online (Sandbox Code Playgroud)

所以我希望有人能够做到这一点.

Viz*_*llx 55

只需在你的失败块中执行此操作: -

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

对于斯威夫特: -

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

更新了Swift 4.1

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


Max*_*Max 5

我找到了一个完美的解决方案.在迅速

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)
         }
     }

}
Run Code Online (Sandbox Code Playgroud)

和Objective-C代码是

    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);
          }
      }
}
Run Code Online (Sandbox Code Playgroud)