IOS开发指南学习——使用MKNetworkKit进行网络请求

本文介绍如何使用MKNetworkKit框架简化iOS应用中的网络请求过程,包括GET和POST方法的实现,以及如何进行文件的上传和下载操作。

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

通过之前的学习,我大概也知道了在ios开发中框架是一种多么神奇且便利的存在。

同样,在进行网络请求时也有十分简单易用的网络请求框架可以使用,其中MKNetworkKit就是一个优秀的轻量级网络请求框架。

使用过程比较简单,具体根据以下方法配制:

1.从https://github.com/MugunthKumar/MKNetworkKit下载并解压MKNetworkKit框架。

2.将MKNetworkKit文件夹添加到工程中。

3.在工程中添加如下几个支持类库或框架:

CFNetwork.Framework

SystemConfiguration.framework

Security.framework

4.添加预编译头文件,其内容如下:

#ifndef MKNetworkKit_Demo_PrefixHeader_pch
#define MKNetworkKit_Demo_PrefixHeader_pch

#import <Foundation/Foundation.h>

完成以上几步的配置之后,工程目录结构如下:


红框中的内容就是我们需要配制添加的。

完成如上步骤之后,剩下的工作就比较简单了,MKNetworkKit框架中也支持GET、POST方法的请求。其使用过程中的主要代码如下:

- (void)startRequest{
    
    
    //设置GET请求名,请求名中不需包括主机名
//    NSString* path = [NSString stringWithFormat:@"/service/mynotes/WebService.php?email=%@&type=%@&action=%@",@"注册邮箱",@"JSON",@"query"];
    
    //设置POST方法请求名
    NSString* path = [NSString stringWithFormat:@"/service/mynotes/WebService.php"];
    //设置POST方法请求中的参数
    NSMutableDictionary* param = [[NSMutableDictionary alloc] init];
    [param setValue:@"注册邮箱" forKey:@"email"];
    [param setValue:@"JSON" forKey:@"type"];
    [param setValue:@"query" forKey:@"action"];
    
    
    
    //以主机名实例化MKNetworkEngine,其中主机名不用包括http协议及www等
    MKNetworkEngine* engine = [[MKNetworkEngine alloc] initWithHostName:@"51work6.com" customHeaderFields:nil];
    
    
    
    //实例化GEI方法操作类
//    MKNetworkOperation* op = [engine operationWithPath:path];
    
    //实例化POST方法操作类
    MKNetworkOperation* op = [engine operationWithPath:path params:param httpMethod:@"POST"];
    
    
    
    
    [op addCompletionHandler:^(MKNetworkOperation* operation){
        
        //添加闭包方法,请求成功时调用
        NSData* data = [operation responseData];
        NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        [self reloadView:dict];
        
    }errorHandler:^(MKNetworkOperation* operation, NSError* error){
        
        //添加闭包函数,请求失败时调用
        NSLog(@"请求错误 : %@",[error localizedDescription]);
    }];
    
    //发送请求
    [engine enqueueOperation:op];
}

以上是使用MKNetworkKit进行网络请求所要使用的主要代码。

同时,使用该框架进行上传下载文件操作也十分方便,下面列出下载操作使用的主要代码,上传操作与之类似。

- (IBAction)goButton:(id)sender {
    
    //获取沙箱目录中的cache路径
    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString* cachePath = paths[0];
    NSString* downloadPath = [cachePath stringByAppendingString:@"/test1.jpg"];
    
    NSString* path = [NSString stringWithFormat:@"/service/download.php?email=%@&FileName=test1.jpg",@"注册邮箱"];
    path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    
    //实例化请求及操作类
    MKNetworkEngine* engine = [[MKNetworkEngine alloc] initWithHostName:@"51work6.com" customHeaderFields:nil];
    MKNetworkOperation* op = [engine operationWithPath:path params:nil httpMethod:@"POST"];
    
    //设置下载目录及进度监控
    [op addDownloadStream:[NSOutputStream outputStreamToFileAtPath:downloadPath append:NO]];
    [op onDownloadProgressChanged:^(double progress){
        NSLog(@"download progress: %.2f%%",progress*100);
        self.progressView.progress = progress;
    }];
    
    [op addCompletionHandler:^(MKNetworkOperation* operation){
        NSLog(@"download finish");
        NSData* data = [operation responseData];
        
        if (data) {
            //有返回值说明下载图片出错
            NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
            if (!dict) {
                NSNumber* resultCode = [dict objectForKey:@"ResultCode"];
                NSString* errStr = [resultCode errorMessage];
                UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"出错信息" message:errStr delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                [alertView show];
            }
        }else{
            //接受图片成功
            UIImage* img = [UIImage imageWithContentsOfFile:downloadPath];
            self.imageView.image = img;
        }
        
    }errorHandler:^(MKNetworkOperation* operation, NSError* error){
        NSLog(@"请求错误:%@",[error localizedDescription]);
    }];
    
    [engine enqueueOperation:op];
}

上传操作与之类似,但是需要两句额外的代码如下:

    //上传文件所需操作
    //filePath代表上传文件的路径
    [op addFile:filePath forKey:@"file"];
    //setFreezable是冻结方法,该方法可以在网络不通时将数据暂存本地,当上线时自动上传所保存的数据
    [op setFreezable:YES];



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值