AFNetworking

6 篇文章 0 订阅
1 将AFNetWorking文件夹导入项目  
2 添加类库 Security.framework、MobileCoreServices.framework、SystemConfiguration.framework  

3 在使用的地方  #import "AFNetworking.h" 

 

解决编译时警告:  
Prefix.pch 文件中加入  
#import <SystemConfiguration/SystemConfiguration.h>  
#import <MobileCoreServices/MobileCoreServices.h>  
   
注:AFNetWorking使用了ARC ,在不使用ARC项目中使用时,对AFNetWorking的所有.m文件添加“-fobjc-arc”  

    在使用ARC项目中,使用“不使用ARC”的类库时,对类库的.m文件添加“-fno-objc-arc” 

1.下载AFNetworking资源包 https://github.com/AFNetworking/AFNetworking

2.将资源包添加到工程文件。

3.在工程的Supporting File群组中打开预编译头文件XXX-Prefix.pch。然后在别的import后面添加如下一行代码#import “AFNetworking”

将AFNetworking添加到预编译头文件,意味着这个框架会被自动的添加到工程的所有源代码文件中

4.AFNetworking通过网络来加载和处理结构化的数据非常明智,它支持JSON,XML,Property List。

[plain]  view plain copy
  1. static NSString*const BaseURLString = @"http://www.raywenderlich.com/downloads/weather_sample/";  
  2.      
  3.     // 1  
  4.     NSString *weatherUrl = [NSStringstringWithFormat:@"%@weather.php?format=json",BaseURLString];  
  5.     NSURL *url = [NSURLURLWithString:weatherUrl];  
  6.     NSURLRequest *request = [NSURLRequestrequestWithURL:url];  
  7.      
  8.     // 2  
  9.     AFJSONRequestOperation *operation =  
  10.     [AFJSONRequestOperationJSONRequestOperationWithRequest:request  
  11.                                               success:^(NSURLRequest*request, NSHTTPURLResponse *response, id JSON) {  
  12.                                                  //  
  13.                                                  NSDictionary*dicWeather = (NSDictionary *)JSON;  
  14.                                                  NSLog(@"result:%@",dicWeather);  
  15.                                               }  
  16.                                               failure:^(NSURLRequest*request, NSHTTPURLResponse *response, NSError *error, id JSON) {  
  17.                                                  UIAlertView*alertView = [[UIAlertView alloc] initWithTitle:@"Error RetrievingWeather"  
  18.                                                                                                message:[NSStringstringWithFormat:@"%@",error]  
  19.                                                                                               delegate:self  
  20.                                                                                       cancelButtonTitle:@"OK"  
  21.                                                                                       otherButtonTitles: nil];  
  22.                                                  [alertView show];  
  23.                                               }];  
  24.     // 5  
  25.     [operation start];  

(1)根据基本的URL构造除完整的一个URL,然后通过这个完整的URL获得一个NSURL对象,然后根据这个url获得一个NSURLRequest。

(2)AFJSONRequestOperation是一个完整的类,整合了从网络中获取数据并对JSON进行解析。

(3)当请求成功,则运行成功块。在本例中,把解析出来的天气数据从JSON变量转换为一个字典(dictionary),并将其存储在字典中。

(4)如果运行出问题了,则运行失败块(failure block),比如网络不可用。如果failure block被调用了,将会通过提示框显示错误信息。

6.AFNetWorking异步加载图片

[plain]  view plain copy
  1. (1)#import “UIImageView+AFNetworking.h”  
  2. (2)UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(40, 80, 40, 40)];  
  3.     __weak UIImageView *_imageView = imageView;  
  4.     [imageViewsetImageWithURLRequest:[[NSURLRequest alloc] initWithURL:[NSURLURLWithString:@"http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0001_sunny.png"]]  
  5.                    placeholderImage:[UIImage imageNamed:@"placeholder.png"]  
  6.                            success:^(NSURLRequest *request,NSHTTPURLResponse *response, UIImage *image) {  
  7.                               _imageView.image = image;  
  8.                                
  9.                               [_imageView setNeedsDisplay];  
  10.                            }  
  11.                            failure:^(NSURLRequest *request, NSHTTPURLResponse*response, NSError *error) {  
  12.                               ;  
  13.                            }];  
  14.     [self.view addSubview:imageView];  

7.GET 和POST请求

(1).构建一个baseURL,以及一个参数字典,并将这两个变量传给AFHTTPClient.

(2).将AFJSONRequestOperation注册为HTTP的操作, 这样就可以跟之前的示例一样,可以获得解析好的JSON数据。

(3).做了一个GET请求,这个请求有一对block:success和failure。

(4).POST请求跟GET一样

[plain]  view plain copy
  1. AFHTTPClient *client= [[AFHTTPClient alloc] initWithBaseURL:baseURL];  
  2. [clientregisterHTTPOperationClass:[AFJSONRequestOperation class]];  
  3. [clientsetDefaultHeader:@"Accept" value:@"application/json"];  
  4. [client postPath:@"weather.php"  
  5.               parameters:parameters  
  6.                 success:^(AFHTTPRequestOperation *operation, id responseObject) {  
  7.                      self.weather =responseObject;  
  8.                      self.title = @"HTTPPOST";  
  9.                      [self.tableViewreloadData];  
  10.                  }  
  11.                 failure:^(AFHTTPRequestOperation *operation, NSError*error) {  
  12.                      UIAlertView *av =[[UIAlertView alloc] initWithTitle:@"Error Retrieving Weather"  
  13.                                                                  message:[NSStringstringWithFormat:@"%@",error]  
  14.                                                                 delegate:nil  
  15.                                                        cancelButtonTitle:@"OK" otherButtonTitles:nil];  
  16.                      [av show];  
  17.    
  18.                  }  
  19.          ];  
  20.    
  21. [client getPath:@"weather.php"  
  22.              parameters:parameters  
  23.                success:^(AFHTTPRequestOperation *operation, id responseObject) {  
  24.                     self.weather =responseObject;  
  25.                     self.title = @"HTTP GET";  
  26.                     [self.tableViewreloadData];  
  27.                 }  
  28.                failure:^(AFHTTPRequestOperation *operation, NSError*error) {  
  29.                     UIAlertView *av =[[UIAlertView alloc] initWithTitle:@"Error Retrieving Weather"  
  30.                                                                  message:[NSStringstringWithFormat:@"%@",error]  
  31.                                                                delegate:nil  
  32.                                                       cancelButtonTitle:@"OK" otherButtonTitles:nil];  
  33.                     [av show];  
  34.    
  35.                 }  
  36.          ];  

8.AFNetworking更新背景图片

Note:

AFJSONOperation,AFPropertyListOperation, AFXMLOperation用来解析结构化数据。

UIImageView+AFNetworking用来快捷的填充image view

AFHTTPClient用来进行更底层的请求

用自定义的AFHTTPClient子类来访问一个web service。

AFNetworkActivityIndicatiorManager用来给用户做出网络访问的提示。

AFImageRequestOperation用来加载图片。


另外,请求方式可以创建一个类继承AFHTTPClient ,官方的例子就是这样写的。 

状态栏设置 

在Appdelegate里面的 - (BOOL)application:(UIApplication *)application  

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中添加 [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];用来给用户做出网络访问的提示。 

请求超时设置 

timeout和参数都是在NSURLRequest/NSMutableURLRequest设置的  

  • NSMutableURLRequest *request = [client requestWithMethod:@"GET" path:@"/" parameters:nil];
  • //这里的parameters:参数就是你的第二个问题如何设置参数
  • [request setTimeoutInterval:120];
  • AFHTTPRequestOperation *operation = [client HTTPRequestOperationWithRequest:request success:^{...} failure:^{...}];
  • [client enqueueHTTPRequestOperation:operation];  

    1.   如果你是继承了AFHTTPClient ,就需要override一个方法requestWithMethod 

      1. - (NSMutableURLRequest *)requestWithMethod:(NSString *)method path:(NSString *)path parameters:(NSDictionary *)parameters{   
      2. NSMutableURLRequest *request = [super requestWithMethod:method path:path parameters:parameters];   
      3. [request setTimeoutInterval:15];   
      4. return request; }

      5. 这个时候的参数设置是调用  
      1. [self postPath:@"" parameters:nil //参数
      2.            success:^(AFHTTPRequestOperation *operation, id responseObject) {
      3.                if (success) {
      4.                    success((AFJSONRequestOperation *)operation, responseObject);
      5.                }
      6.            } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
      7.                if (failure) {
      8.                    failure((AFJSONRequestOperation *)operation, error);
      9.                }
      10.            }];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值