IOS:MKNetworkKit的网络请求(使用封装好的类)

既然看到本文章,至少你已经对MKNetworkKit不是太陌生了。那就废话少说,直接上代码。


一、使用前的步骤

         导入MKNetworkKit框架,还有三个依赖框架,另外一点就是可以导入我封装好的MKNetworkKit网络请求类(下面有,资源下载也有,下载需要2个积分MknetworkKit网络请求封装类)。
      关于前摇这块不多说,我的另外一个微博有详细解说。

二、上代码

         OK,切入正题。

      由于关于API接口,我个人是比较尊重他人隐私的,这里就用假的,我会解说。

      例如一个接口:http://www.blockXiaofan.com/blockXiaofanAPIpath?&y=you&m=me&h=he

        我们首先来分解这个URL

      其中:  域名: http://www.blockXiaofan.com,(貌似在xcode5.1.1的时候,请求的域名要改为www.blockXiaofan.com

                   API地址:  blockXiaofanAPIpath    

                   请求参数(也就是params): &y=you&m=me&h=he    (参数是key、value值展现的,中间使用&连接起来)

      除此之外还有请求头,和post请求时需要的请求体   


     上代码            

- (void)loadData
{
    __weak RecommendViewController *this = self;
     _arrayData = [[NSMutableArray alloc]init];
    [ZMKDataservice requestWithHostName:HOST_NAME apiPath:nil headerField:nil URLString:PATHURL_RECOM_HEADER params:nil httpMethod:@"GET" ssl:NO block:^(id result) {
        __strong RecommendViewController *strongSelf = this;
        NSDictionary *JsonDic = [NSJSONSerialization JSONObjectWithData:result options:NSJSONReadingMutableContainers error:nil];
        NSArray *array = [JsonDic objectForKey:@"data"];
        for (NSDictionary *dic in array) {
            RecomModel *recomModel = [[RecomModel alloc]initContentWithDic:dic];
            [strongSelf.arrayData addObject:recomModel];
            _collectionView.array = strongSelf.arrayData;
        }
    }];
}

          这是我实现将请求下来的数据封装为model数组传给视图时,网络请求的所有代码。

         __weak 是因为ARC,然后就是初始化可变数组,然后是我的类方法请求数据,里面有HostName(域名),apiPath(API地址),headerField(请求头),URLString(URL,本人比较懒,直接将API地址与参数混搭在一起,直接写在URL里请求就行了),params(请求参数),httpMethod(请求方式),ssl(是否加密访问),block(回调结果)

        请求下来的数据我先定为id类型,一般来说都是二进制数据流,我用的是系统自带的JSON解析方法,5.0之前可以使用jsonKit等。这点根据自己的需要来自己编写。


下面就是我封装好的完完整整的类了,在.h文件中还有要自己声明一个block,然后在方法名中实现,在用的地方调用

typedef void(^CompletionLoad)(id result);

+ (MKNetworkEngine *)requestWithHostName:(NSString *)hostName
                                 apiPath:(NSString *)apiPath
                             headerField:(NSDictionary *)header
                               URLString:(NSString *)URLString
                                  params:(NSDictionary *)params
                              httpMethod:(NSString *)httpMethod
                                     ssl:(BOOL)isBOOL
                                   block:(CompletionLoad)block
{
    /**
     *如果路径中包含中文,则需要转成专门用于URL的编码格式格式,有些服务器的编码可能有所不同 ----很重要------
     */
    URLString = [URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    //
    MKNetworkEngine *engine = [[MKNetworkEngine alloc]initWithHostName:hostName apiPath:apiPath customHeaderFields:header];
    MKNetworkOperation *operation = [engine operationWithPath:URLString params:params httpMethod:httpMethod ssl:isBOOL];
    //处理数据
    [operation addCompletionHandler:^(MKNetworkOperation *completedOperation) {
        if (block != nil) {
            block([completedOperation responseData]);
        }
    } errorHandler:^(MKNetworkOperation *completedOperation, NSError *error) {
        NSLog(@"Error:%@",completedOperation.error);
        if (block == nil) {
            block(error);
        }
    }];
    //发送请求
    [engine enqueueOperation:operation];
    
    return engine;
}


     这个类封装的其实不是太好,还有很多改进,比如说冷冻机制,还有数据持久化的什么没有弄好,但是再过几天准备要去面试,时间紧,赶项目,回头补上......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值