AFNetworking使用总结

1 将AFNetWorking文件夹导入项目

2 添加类库 Security.framework、MobileCoreServices.framework、SystemConfiguration.framework

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

解决编译时警告:


  1. Prefix.pch文件中加入  
  2. #import <SystemConfiguration/SystemConfiguration.h>  
  3. #import <MobileCoreServices/MobileCoreServices.h>  

注:AFNetWorking使用了ARC ,在不使用ARC项目中使用时,对AFNetWorking的所有.m文件添加“-fobjc-arc” 

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

[plain] view plaincopy


  1. static NSString*const BaseURLString = @"http://www.raywenderlich.com/downloads/weather_sample/";     
  2.     // 1      NSString *weatherUrl = [NSStringstringWithFormat:@"%@weather.php?format=json",BaseURLString];      NSURL *url = [NSURLURLWithString:weatherUrl];      NSURLRequest *request = [NSURLRequestrequestWithURL:url];       // 2      AFJSONRequestOperation *operation =      [AFJSONRequestOperationJSONRequestOperationWithRequest:request                                                success:^(NSURLRequest*request, NSHTTPURLResponse *response, id JSON) {                                                   //                                                   NSDictionary*dicWeather = (NSDictionary *)JSON;                                                   NSLog(@"result:%@",dicWeather);                                                }                                                failure:^(NSURLRequest*request, NSHTTPURLResponse *response, NSError *error, id JSON) {                                                   UIAlertView*alertView = [[UIAlertView alloc] initWithTitle:@"Error RetrievingWeather"                                                                                                 message:[NSStringstringWithFormat:@"%@",error]                                                                                                delegate:self                                                                                        cancelButtonTitle:@"OK"                                                                                        otherButtonTitles: nil];                                                   [alertView show];                                                }];      // 5      [operation start];   

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

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

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

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

6.AFNetWorking异步加载图片


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

7.GET 和POST请求 

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

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

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

(4).POST请求跟GET一样

[plain]view plaincopy


  1. [list=1]AFHTTPClient *client= [[AFHTTPClient alloc] initWithBaseURL:baseURL];  [clientregisterHTTPOperationClass:[AFJSONRequestOperation class]];  [clientsetDefaultHeader:@"Accept" value:@"application/json"];  [client postPath:@"weather.php"                parameters:parameters                  success:^(AFHTTPRequestOperation *operation, id responseObject) {                       self.weather =responseObject;                       self.title = @"HTTPPOST";                       [self.tableViewreloadData];                   }                  failure:^(AFHTTPRequestOperation *operation, NSError*error) {                       UIAlertView *av =[[UIAlertView alloc] initWithTitle:@"Error Retrieving Weather"                                                                   message:[NSStringstringWithFormat:@"%@",error]                                                                  delegate:nil                                                         cancelButtonTitle:@"OK" otherButtonTitles:nil];                       [av show];                    }           ];     
  2. [client getPath:@"weather.php"               parameters:parameters                 success:^(AFHTTPRequestOperation *operation, id responseObject) {                      self.weather =responseObject;                      self.title = @"HTTP GET";                      [self.tableViewreloadData];                  }                 failure:^(AFHTTPRequestOperation *operation, NSError*error) {                      UIAlertView *av =[[UIAlertView alloc] initWithTitle:@"Error Retrieving Weather"                                                                   message:[NSStringstringWithFormat:@"%@",error]                                                                 delegate:nil                                                        cancelButtonTitle:@"OK" otherButtonTitles:nil];                      [av show];     
  3.                 }           ];    

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

状态栏设置 

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

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

请求超时设置 

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


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

如果你是继承了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; } 

这个时候的参数设置是调用 


  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.            }]; 

本文链接:http://www.cocoachina.com/bbs/read.php?tid=184183

时间: 2024-10-04 01:08:55

AFNetworking使用总结的相关文章

网络之AFNetworking

Json.Xml解析第三方库多了去,就不一一说明,现在开始进入AFNetworking.由于AFNetworking支持ARC,ASI不支持ARC,现在越来越多的开始使用AFNetworking. http://blog.csdn.net/huang2009303513/article/details/41039681 用法都是一样的,保存起来防止博客丢失 //在请求响应时,有时候响应的内容可能是text/html.text/plain格式,所以需要在AFURLResponseSerializa

iOS网络组件AFNetworking与ASIHTTPRequest的对比

在开发iOS应用过程中,如何高效的与服务端API进行数据交换,是一个常见问题.一般开发者都会选择一 个第三方的网络组件作为服务,以提高开发效率和稳定性.这些组件把复杂的网络底层操作封装成友好的类和 方法,并且加入异常处理等. 那么,大家最常用的组件是什么?这些组件是如何提升开发效率和稳定 性的?哪一款组件适合自己,是 AFNetworking(AFN)还是 ASIHTTPRequest(ASI)?几乎每一个iOS互联网 应用开发者都会面对这样的选择题,要从这两个最常用的组件里选出一个好的还真不是

开源中国iOS客户端学习 (八) 网络通信AFNetworking类库

AFNetworking是一个轻量级的iOS网络通信类库,继ASI类库不在更新之后开发者们有一套不错选择: AFNetworking类库源码下载和使用教程: https://github.com/AFNetworking/AFNetworking 如果想深入研究有官方文档介绍:http://afnetworking.github.com/AFNetworking/ 在开源中国iOS客户端中关于AFNetworking类库的使用只用到了两个实例方法 (1)getPath:parameters:su

IOS开发: 在Swift中使用AFNetworking

 今天主要简单说一下如何在Swift工程中使用时下比较流行的AFNetworking请求框架.     由于目前AFNetworking目前还没有Swift版本,因此我们的工程使用cocoapod来安装AFNetworking. 这是我的Prodfile文件,cocoapod的使用方法跟使用OC是时候是一模一样的,为了方便,我们在工程中随便创建一个类,选择语言OC,我们会发现工程中会多出来一个SwiftStudy-Bridging-Header.h文件,删除创建的oc类,在这里引入   开发:

iOS开发之AFNetworking

1.概述 AFNetworking简称AFN,是iOS开发中主流第三方框架之一.苹果的一套框架NSContention发送请求与接收请求的方式十分繁琐.操作起来很不方便.不仅要做区分各种请求设置各种不同的参数,而且还要经常在多线程里操作,同时还要对请求与返回的数据做各种序列化的操作,同时还要考虑请求数据的安全等一堆问题.而AFNetworking帮我们简化了网络操作. 2.早前的几个网络框架 1.ASI框架: HTTP终结者.很牛, 但是有BUG, 已经停止更新. 2.MKNetworkKit

[翻译] Working with NSURLSession: AFNetworking 2.0

Working with NSURLSession: AFNetworking 2.0   简单翻译,有很多错误,看官无法理解处请英文原文对照. http://code.tutsplus.com/tutorials/working-with-nsurlsession-afnetworking-20--mobile-22651 by Bart Jacobs3 Feb 2014 In the previous installments of this series, we've taken a cl

较老版本 AFNetworking 使用心得

较老版本的 AFNetworking 下载链接 http://pan.baidu.com/s/14Cxga 将压缩包中的文件夹拖入xcode工程项目中并引入如下的框架   简单的 JOSN 解析例子     static NSString *serverAddress = @"http://m.weather.com.cn/data/101110101.html"; // 1.创建JSON操作对象     AFJSONRequestOperation *operation =    

基于AFNetworking封装网络库

阅读原文 基于AFNetworking封装网络库 对于开发人员来说,学习网络层知识是必备的,任何一款App的开发,都需要到网络请求接口.很多朋友都还在使用原生的NSURLConnection一行一行地写,代码到处是,这样维护起来更困难了. 对于使用AFNetworking的朋友来说,很多朋友都是直接调用AFNetworking的API,这样不太好,无法做到全工程统一配置. 最好的方式就是对网络层再封装一层,全工程不允许直接使用AFNetworking的API,必须调用我们自己封装的一层,如此一来

[翻译] AFNetworking 2.0

大名鼎鼎的开源网络库AFNetworking 2.0,目前只是翻译了Github上的链接文章,使用教程请点击 http://www.cnblogs.com/YouXianMing/p/3651462.html   https://github.com/AFNetworking/AFNetworking   AFNetworking is a delightful networking library for iOS and Mac OS X. It's built on top of the F

afnetworki-ios AFNetworking网络请求出现415错误

问题描述 ios AFNetworking网络请求出现415错误 POST请求,参数上传是json.没有参数的情况下,后台能接受到请求,加上参数之后就出现415错误,很纠结,我传给后台的也是json数据,但是报这样的错误让我不知道如何更改.求大神帮忙,谢谢了! 解决方案 415,错误码已经很明确告诉你了 你还是要检测一下你post的json数据格式等 比如你可以用浏览器插件postman来手动测试一下, 看是否你post的格式服务器接受 解决方案二: 估计是你的服务器不支持post json的格