【问题标题】:How can I migrate in AFNetworking 3.0?如何在 AFNetworking 3.0 中迁移?
【发布时间】:2016-06-28 13:32:11
【问题描述】:

我正在迁移到 AFNetworking 3.0。我在 AFNetworking 中使用 AFHTTPRequestOperation,但它在最近的更新中被删除。我尝试了所有可能的解决方案。基本上我需要发布一个带有 Header 的 JSON。我将我的 NSDIctionary 转换为 JSON 对象,然后将其添加为字符串。这是带有我的 Header 的示例 JSON

RequestHeader={
  "lname" : "sadhsdf",
  "bday" : "2003-03-13",
  "age" : "12",
  "address" : "dsfhskdjgds",
  "gender" : "M",
  "cnumber" : "12312412",
  "fname" : "sadhsdf",
  "RequestType" : "userregistration",
  "Email" : "sldjlkasd@sjdhflksdf.com",
  "status" : "dsfhskdjgds",
  "Password" : "123456"
}

RequestHeader 是一个 NSString,其余的是 NSDictionary。

如何在 AFNetworking 3.0 中应用它?提前谢谢你。

【问题讨论】:

标签: ios objective-c json afnetworking afnetworking-3


【解决方案1】:
NSURL *URL = [NSURL URLWithString:@"http://example.com/api"];
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:URL sessionConfiguration:configuration];
manager.responseSerializer = [AFJSONResponseSerializer serializer];

NSMutableDictionary *params = [[NSMutableDictionary alloc]init];
[params setValue:@"some value" forKey:@"someKey"];

[manager POST:@"search" parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    //If you need to send image
    UIImage *image = [UIImage imageNamed:@"my_image.jpg"];
    [formData appendPartWithFileData:UIImageJPEGRepresentation(image, 0.5) name:@"Image" fileName:@"my_image.jpg" mimeType:@"image/jpeg"];

} success:^(NSURLSessionDataTask *task, id responseObject) {

} failure:^(NSURLSessionDataTask *task, NSError *error) {

}];

【讨论】:

    【解决方案2】:
    NSURL *url = [NSURL URLWithString:@"https://example.com/"];
    
    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
    
    NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
    
                            height, @"user[height]",
    
                            weight, @"user[weight]",
    
                            nil];
    
    [httpClient postPath:@"/myobject" parameters:params 
    success:^(AFHTTPRequestOperation *operation, id responseObject) {
    
        NSString *responseStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
    
        NSLog(@"Request Successful, response '%@'", responseStr);
    
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    
        NSLog(@"[HTTPClient Error]: %@", error.localizedDescription);
    }];
    

    【讨论】:

    • 嗨!谢谢你的回答我非常感谢,但似乎 AFHTTPClient 也被删除了。
    【解决方案3】:

    您可以查看官方迁移指南here

    【讨论】:

      【解决方案4】:

      使用常见的NSObject 类调用带有 AFNetworking 3.0 的 WS 这是我的重复答案,但它是使用 AFNetworking 3.0 更新的 首先在这里使用任何名称创建NSObject 类我正在创建名称为 Webservice.h 和 Webservice.m

      的NSObject 类

      Webservice.h

      @interface Webservice : NSObject
      
      +  (void)requestPostUrl:(NSString *)strURL parameters:(NSDictionary *)dictParams success:(void (^)(NSDictionary *responce))success failure:(void (^)(NSError *error))failure;
      
      @end
      

      Webservice.m 你的 nsobject.m 文件是这样的。(在 .m 文件中添加两个函数)

      #import "Webservice.h"
      
      #define kDefaultErrorCode 12345
      
      @implementation Webservice
      
      +  (void)requestPostUrl:(NSString *)strURL parameters:(NSDictionary *)dictParams success:(void (^)(NSDictionary *responce))success failure:(void (^)(NSError *error))failure {
      
          AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
          [manager setResponseSerializer:[AFHTTPResponseSerializer serializer]];
      
          [manager POST:strURL parameters:dictParams progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
              if([responseObject isKindOfClass:[NSDictionary class]]) {
                  if(success) {
                      success(responseObject);
                  }
              }
              else {
                  NSDictionary *response = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
                  if(success) {
                      success(response);
                  }
              }
      
          } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
              if(failure) {
                  failure(error);
              }
      
          }];
      }
      
      @end
      

      确保你必须用 success 替换你的字典键并且 消息用于处理响应回调函数

      像这样使用从任何 viewcontroller.m 和任何 viewControllers 中调用任何方法。对于临时我使用viewDidLoad 来调用这个WS。

       - (void)viewDidLoad {
              [super viewDidLoad];
      
              NSDictionary *dictParam = @{@"parameter1":@"value1",@"parameter1":@"value2"};
      
              [Webservice requestPostUrl:@"add your webservice URL here" parameters:dictParam success:^(NSDictionary *responce) {
                  //Success
                  NSLog(@"responce:%@",responce);
                  //do code here
              } failure:^(NSError *error) {
                  //error
              }];
          }
      

      在上述方法中添加您的参数、值和网络服务 URL。你可以很容易地使用这个NSObjcet 类。更多详情请访问AFNetworking 3.0或my old answear with AFNetworking 2.0。

      【讨论】:

      • 非常感谢你拯救了我的一天!
      • @RyanEnguero 欢迎。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多