AFNetworking 2.0 学习(2)

本文详细介绍了如何利用AFNetworking库,通过单例设计模式实现iTunes API的网络请求过程,包括下载AFNetworking、创建ITunesClient类、定义搜索方法以及实现搜索类型和搜索项的调用流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 接下来的书上的翻译:

         准备:现在你要做的是下载AFNetworking 然后添加到你的工程当中。

          接下来要做的:创建ITunesClient类,这个类主要是通过iTunes API检索iTunes中的信息。 

     创建 ITunesClient 头文件

        ITunesClinet继承自AFHTTPSessionManager,它的代码如下:

#import "AFHTTPSessionManager.h"

@interface ITunesClinet:AFHTTPSessionManager

+(ITunesClinet *)sharedClinet;
-(NSURLSessionDataTask *)searchType:(NSString *)type withTerm:(NSString *)term completion:(void(^)(NSDictionary *results,NSError *error))completion;

@end

   头文件中,定义两个方法,iTunesClient类是通过单例设计模式实现的类,所以我们可以通过静态方法shareClient方法来调用iTunesClient实例,然后通过searchType:withTerm:completion:方法来搜索iTunes资料库。

  实现shareClient方法 

     这个方法将被用来调用ITunesClient实例:

+(ITunesClient *)sharedClient{
   static ITunesClient *sharedClient = nil;
   static dispatch_once_t onceToken;
   dispatch_once(&onceToken,^{
      NSURL *baseURL = [NSURL URLWithString:@"https://itunes.apple.com/"];
      NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
      
      sharedClient = [[ITunesClinet alloc] initWithBaseURL:baseURL sessionConfiguration:config];
      sharedClient.responseSerializer = [AFJSONResponseSerializer serializer];
   });
   return sharedClient;
}

  在sharedClient方法中,我们定一个一个名为sharedClient静态变量初始化一次有且只有一次。我们通过GCD的dispatch_once方法初始化,只是Objective-c比较推崇的单例设计模式。

   在dispatch_once我们定义了一个baseURL变量,并讲其设置为"http://itunes.apple.com,"这是iTunes的基础URL但这不是完整的iTunes搜索API地址,我们可以通过searchType:with  Term:completion:failure方法来添加其余部分,然后我们使用defaultSessionConfiguration创建NSURLSessionConfiguratin,这里我们使用简单的默认值,当然你也可以自定义。

    我们现在初始化ITunesClient的initWithBaseURL:sessionConfiguration:构造函数,在这个例子中我们使用AFNetworking 来响应iTunes API,在默认情况下,我们通过AFJSONResponseSerializer解析JSON。

   初始化searchType:withTerm:completion方法

-(NSURLSessionDataTask *)searchType:(NSString *)type withTerm:(NSString *)term completion:(void*()(NSDictionary *results,NSError *error)) completion{
    NSDictionary *params = [[NSDictionary alloc]initWithObjectsAndKey:type,@"enity",term,@"term",nil];
    NSURLSessionDataTask *task = [self GET:@"/search" parameters:params success:^(NSURLSessionDataTask *task,id responseObjecr){
       NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)task.response;
       if (httpResponse.statusCode == 200){
           dispatch_async(dispatch_get_main_queue(),^{
              completion(responseObject,nil);
           });
       }else{
          dispatch_async(dispatch_get_main_queue(),^{
            completion(nil,nil);
          });
        }
       }failure ^(NSURLSessionDataTask *task,NSError *error){
          dispatch_async(dispatch_get_main_queue(),^{
           completion(nil,error);
          });
    }];
    return task;
}

  我们使用类型参数来指定搜索,参数就是指定搜索项,我们创建一个包含搜索项的NSDictionary作为HTTP的请求参数。

 接下来我们调用在AFHTTPSessionManager中的GET方法:GET:parameters:success:failure:这个方法,并以此简历基本的URL,如果我们想找Jimmuy+Buffett的专辑,我们就可以通过 iTunes API搜索到相关信息,你可以通过

http://www.apple.com/itunes/ affiliates/resources/documentation/itunes-store-web-service-search- api.html. 获取更多信息。

   AF的POST方法,有着和GET差不多的方法,GET:parameters:success:failure:方法,POST方法是这样写的:POST:parameters:success:failure。

   如果请求成功,就会调用成功的代码块,但是这并不意味着,整个请求就是成功的,只要在成功代码块中验证响应码是200,这就代表请求本身成功了,就会返回调用responseObject代码块,否则就能返回代码块中的nil。

    如果请求成功,AFHTTPSessionManager传递响应序列化,回想到shareClient方法,用AFJSONResponseSerializer来解析JSON对象,包含的NSDictionary对象。

AFNetworking 包含几个标准的序列化,包括AFJSONResponseSerializer,AFXMLResponseSerializer,AFXMLDocumentResponseSerializer,AFPropertyListResponseSerializer和AFImageResponseSerializer。

      使用ITunesClient 类

  

NSString *type = @"album";
NSString *term = @"jimmy + buffett";

ITunesClient *itunesClient = [ITunesClient sharedClient];
[itunesClient searchType:type withTerm:term completion ^(NSDictionary *results,NSError *error){
       if (results){
          NSLog(@"%@",results);
       }else{
          NSLog(@"ERROR:%@",error);
       }

}];
  • type:这表示将要执行的搜索类型

  • term:要搜索的东西

  • completion:一旦搜索完成就调用这个代码块

按照上面的方法我们就能完成一个基本的网络请求。


转载于:https://my.oschina.net/zboy/blog/346868

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值