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

AFNetworking是一个轻量级的iOS网络通信类库,继ASI类库不在更新之后开发者们有一套不错选择;

AFNetworking类库源码下载和使用教程: https://github.com/AFNetworking/AFNetworking

如果想深入研究有官方文档介绍:http://afnetworking.github.com/AFNetworking/

在开源中国iOS客户端中关于AFNetworking类库的使用只用到了两个实例方法

(1)getPath:parameters:success:failure:

(2)postPath:parameters:success:failure:

他们用法基本相同,只是请求数据方式不同,一种是Get请求和Post请求。Get是向服务器发索取数据的一种请求,也就相当于查询信息功能,不会修改类容,Post是向服务器提交数据的一种请求,影响数据内容;两种方法定义:

- (void)getPath:(NSString *)path
     parameters:(NSDictionary *)parameters
        success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
        failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
{
    NSURLRequest *request = [self requestWithMethod:@"GET" path:path parameters:parameters];
    AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure];
    [self enqueueHTTPRequestOperation:operation];
}
- (void)postPath:(NSString *)path
      parameters:(NSDictionary *)parameters
         success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
         failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
{
    NSURLRequest *request = [self requestWithMethod:@"POST" path:path parameters:parameters];
    AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure];
    [self enqueueHTTPRequestOperation:operation];
}

getPath:parameters:success:failure:方法在程序中使用举例:

NewsView.m

- (void)reload:(BOOL)noRefresh
{
    //如果有网络连接
    if ([Config Instance].isNetworkRunning) {
        if (isLoading || isLoadOver) {
            return;
        }
        if (!noRefresh) {
            allCount = 0;
        }
        int pageIndex = allCount/20;
        NSString *url;  

        switch (self.catalog) {
            case 1:
                url = [NSString stringWithFormat:@"%@?catalog=%d&pageIndex=%d&pageSize=%d", api_news_list, 1, pageIndex, 20];
                break;
            case 2:
                url = [NSString stringWithFormat:@"%@?type=latest&pageIndex=%d&pageSize=%d", api_blog_list, pageIndex, 20];
                break;
            case 3:
                url = [NSString stringWithFormat:@"%@?type=recommend&pageIndex=%d&pageSize=%d", api_blog_list, pageIndex, 20];
                break;
        }  

        [[AFOSCClient sharedClient]getPath:url parameters:Nil   

          success:^(AFHTTPRequestOperation *operation, id responseObject) {  

            [Tool getOSCNotice2:operation.responseString];
            isLoading = NO;
            if (!noRefresh) {
                [self clear];
            }  

            @try {
                NSMutableArray *newNews = self.catalog <= 1 ?  

                [Tool readStrNewsArray:operation.responseString andOld: news]:
                [Tool readStrUserBlogsArray:operation.responseString andOld: news];
                int count = [Tool isListOver2:operation.responseString];
                allCount += count;
                if (count < 20)
                {
                    isLoadOver = YES;
                }
                [news addObjectsFromArray:newNews];
                [self.tableNews reloadData];
                [self doneLoadingTableViewData];  

                //如果是第一页 则缓存下来
                if (news.count <= 20) {
                    [Tool saveCache:5 andID:self.catalog andString:operation.responseString];
                }
            }
            @catch (NSException *exception) {
                [NdUncaughtExceptionHandler TakeException:exception];
            }
            @finally {
                [self doneLoadingTableViewData];
            }
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"新闻列表获取出错");
            //如果是刷新
            [self doneLoadingTableViewData];  

            if ([Config Instance].isNetworkRunning == NO) {
                return;
            }
            isLoading = NO;
            if ([Config Instance].isNetworkRunning) {
                [Tool ToastNotification:@"错误 网络无连接" andView:self.view andLoading:NO andIsBottom:NO];
            }
        }];
        isLoading = YES;
        [self.tableNews reloadData];
    }
    //如果没有网络连接
    else
    {
        NSString *value = [Tool getCache:5 andID:self.catalog];
        if (value) {
            NSMutableArray *newNews = [Tool readStrNewsArray:value andOld:news];
            [self.tableNews reloadData];
            isLoadOver = YES;
            [news addObjectsFromArray:newNews];
            [self.tableNews reloadData];
            [self doneLoadingTableViewData];
        }
    }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索afnetworking
, ios afnetworking
, afnetwork
, operation
, ios类库
, success
, parameters
, Self
, failure
jquery_ajax的success
,以便于您获取更多的相关知识。

时间: 2025-01-30 04:57:38

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

开源中国iOS客户端学习 (五) 网络通信ASI类库(1)

如今的应用大部分基予网络,在开源中国iOS客户端源码中关于网络通信方面用了三个类库,ASI和AFNetworking,还有一个苹果官方给出的Reachability用于检测当前网络状况,本文介绍当前用的比较多的ASI类库: ASIHTTPRequest简称ASI,它是对CFNetwork API进行封装,使在与web服务器通信时的繁琐步骤变得容易一些.它是使用Objective-C 编写,能够很好的用在Mac OS X和iPhone应用程序中:它适用于执行基本的HTTP请求和交互基于 REST的

开源中国iOS客户端学习 (十二) 用户登陆

上一篇博客  开源中国iOS客户端学习--(十一)AES加密 中提到将用户名和密码保存到了本地沙盒之中,在从本地读取用户名和密码,这是一个怎样的过程? -(void)saveUserNameAndPwd:(NSString *)userName andPwd:(NSString *)pwd { NSUserDefaults * settings = [NSUserDefaults standardUserDefaults]; [settings removeObjectForKey:@"User

开源中国iOS客户端学习 (四) GCDiscreetNotificationView提示视图

GCDiscreetNotificationView 类库作用是: 在不阻止用户与设备应用程序交互情况下,作为一个通知视图来显示一个当前的状态. GCDiscreetNotificationView 类库下载地址 https://github.com/gcamp/GCDiscreetNotificationView 在开源中国iOS客户端上,当无法获取网络时, 我们常用的通知可能是一个UIAlertView的警告,提示当前网络未连接,这样就强制用户必须做出选择,被强制的肯定会不爽.这是GCDis

开源中国iOS客户端学习 (六) 网络连接检测

开源中国iOS客户端基于网络同步数据,从而达到与网页看到同样数据效果,所以在启动程序的时候需要检查网络:这也是每一个联网应用启动的第一步,如果联网应用没有检查网络,苹果公司将不予以审核通过: 开源中国iOS客户端大牛们在写网络检测时很迷惑人,开始以为他们用的是ASI类库做的网络检测,今天才看明白,他们并不是用的ASI类库检测,而是用到AFNetworking这个类库里一个实例方法做网络连接检测: 先看Appdelegate文件: 在application:didFinishLaunchingWi

开源中国iOS客户端学习 (十一) AES加密

数据加密在解密在软件开发过程中举足轻重的作用,可能有的公司在加密的时候有自己公司内部一套设计的算法,而在这方面不想浪费太大精力就可以去考虑使用第三方提供的加密算法,如AES加密算法,本篇内容介绍开源中国iOS客户端使用ASE算法加密密码: AES   GitHub 下载地址  https://github.com/Gurpartap/AESCrypt-ObjC 对一个比较大的工程我们可能都不知道某个类库或者方法在哪被使用,但是智能的Xcode给我们提供了一个全局搜索的功能,我们可以在真个工程中来

开源中国iOS客户端学习 (十) 搜索功能

开源中国社区团队基于开源项目 GitLab 开发了一款和GitHub一样的在线代码托管平台 Git @ OSC.并且开源客户端的源码在GitHub上不做更新,迁移到Git @OSC上了,欲了解更多请访问Git @ OSC官网http://git.oschina.net 客户端最新源码下载地址:http://git.oschina.net/oschina/iphone-app 回归正题,今天分析的是开源中国iOS客户端搜索功能涉及道一些知识,XML解析和动态加载表视图单元格: 在软件首页右上角有一

开源中国iOS客户端学习 (七) MBProgressHUD特效

在开源中国iOS客户端中也用到了MBProgressHUD这个特效,主要作用为应用显示一个过渡的作用,常用于打开一个联网页面加载过程,防止出现假死现象,如果网速慢则告诉用户已经在很努力很努力的加载中. GitHub上下载地址:https://github.com/jdg/MBProgressHUD 源码中也自带了一个Demo,显示13中动画效果,可以根据需要选取其中特效加以使用,使用方法基本一样:使用的时候只加把MBProgressHUD.h和MBProgressHUD.m拖入工程中,在使用的文

开源中国iOS客户端学习 (二) 下拉刷新特效EGOTableViewPullRefresh

打开开源中国iOS客户端应用程序第一步就是加载数据,经常我们在第二次以后打开的时候,我们界面显示的是上一次更新的数据,此时我们想看最新内容就需要去刷新数据加载这些内容,加载需要一个等待过程,如何能让用户在等待过程中不焦急,能够等待这个过程完成,这就需要给用户一个心里安慰,让用户知道该软件正在很努力很努力的执行自己命令,这就需要我们为自己应用程序添加一些特效: 开源中国iOS客户端用到了不少特效,这些特效在当前很多应用软件中都比较流行,基本上这些特效都属于第三方类库,本次想说的是下拉刷新特效,EG

开源中国iOS客户端学习 (九) 代码片段之时间标记

开源中国客户端中无论是综合里面文章,还是问答里问题还是动弹离得说说,每一条后面都会注释有时间,比如"10分钟之前"  "2小时前" "5天前" 或者直接是时间显示"2013-2-9"等,这些时间在很多应用里都是必须的,为的是给用户一个时间感,知道信息是最新的,也方便根据时间查阅以往信息: 这些时间从API解析下来的时间格式都为 yyyy-MM-dd HH:mm:ss(比如:2013-03-09 09:51:22),通过在API