MKNetworkKit框架的使用
来源:互联网 发布:ifashion淘宝怎么认证 编辑:程序博客网 时间:2024/05/20 15:41
什么是MKNetworkKit?
MKNetworkKit 是一个无缝基于Objective-C,block为基础,支持ARC的一个简单易用网络请求框架。MKNetworkKit 是受到了ASIHTTPRequest和AFNetworking这两个流行的网络框架的启发,结合了这两个框架的特性,MKNetworkKit添加了一些新的特性。除此这外,MKNetworkKit只需要你写些轻量的代码。这框架的介绍在我转载的文章(译文)可以看到:http://blog.csdn.net/id357015100/article/details/39780627
当然建议阅读原文(英文):http://blog.mugunthkumar.com/products/ios-framework-introducing-mknetworkkit/
个人觉得网络模块很重要,很多项目都需要围绕着网络进行,以及软件的优化,缓存处理等问题都与网络有关。
先来两个基本的网络请求:
GET请求:
MKNetworkEngine *engine = [[MKNetworkEngine alloc] initWithHostName:@"www.weather.com.cn" customHeaderFields:nil]; //customHeaderFields :头信息,可以为nil NSString *pathUrl = [NSString stringWithFormat:@"data/sk/%@.html",@101010300]; MKNetworkOperation *op = [engine operationWithPath:pathUrl params:nil httpMethod:@"GET"]; [op addCompletionHandler:^(MKNetworkOperation *completedOperation) { NSLog(@"%@",[completedOperation responseJSON]); } errorHandler:^(MKNetworkOperation *completedOperation, NSError *error) { }]; [engine enqueueOperation:op];POST请求:
发送一条微博
MKNetworkEngine *engine = [[MKNetworkEngine alloc] initWithHostName:@"api.weibo.com" apiPath:@"2/statuses/update.json" customHeaderFields:nil]; NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObject:@"2.003********vlCad41e6e8fbmGri2B" forKey:@"access_token"]; [params setObject:@"不带图片微博发送" forKey:@"status"]; MKNetworkOperation *op = [engine operationWithPath:nil params:params httpMethod:@"POST" ssl:YES]; [op addCompletionHandler:^(MKNetworkOperation *completedOperation) { NSLog(@"微博发送成功"); } errorHandler:^(MKNetworkOperation *completedOperation, NSError *error) { NSLog(@"微博发送失败"); }]; [engine enqueueOperation:op];
按如下顺序编写 engine类方法:
- 根据参数准备 URL
- 创建一个 MKNetworkOperation 对象
- 设置方法参数
- 设置 operation 的 completion 块和 error 块(在 completation 块中处理 response 并转换为模型)
- 可选地,添加一个 progress 块(或者在 view controller 中做这个)
- 如果 operation 是下载,设置下载流(通常是文件)。这步也是可选的
- 当 operation 完成,处理结果并调用方法块,并将数据返回给调用者。
1.新建子类
2.在子类的.h文件申明一个发微博的方法
#import "MKNetworkEngine.h"typedef void(^WeiboCompletionBlock)(id result);typedef void(^ProgressBlock)(double progress);@interface CLPWeiboNetwork : MKNetworkEngine//发送微博方法-(MKNetworkOperation*)sendWeibo:(NSData *) data text:(NSString *)text onCompletion:(WeiboCompletionBlock) completionBlock onProgress:(ProgressBlock) progBlock onError:(MKNKErrorBlock) errorBlock;@end3.在.m文件去实现这个方法
#import "CLPWeiboNetwork.h"@implementation CLPWeiboNetwork//发送微博方法-(MKNetworkOperation*)sendWeibo:(NSData *) data text:(NSString *)text onCompletion:(WeiboCompletionBlock) completionBlock onProgress:(ProgressBlock) progBlock onError:(MKNKErrorBlock) errorBlock{ NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObject:@"2.003********vlCad41e6e8fbmGri2B" forKey:@"access_token"]; [params setObject:text forKey:@"status"]; NSString *url = (data != nil)? @"2/statuses/upload.json":@"2/statuses/update.json"; MKNetworkOperation *op = [self operationWithPath:url params:params httpMethod:@"POST" ssl:YES]; if (data != nil) { [op addData:data forKey:@"pic"]; } [op setFreezable:YES]; [op addCompletionHandler:^(MKNetworkOperation *completedOperation) { NSString *jsonString = [completedOperation responseJSON]; completionBlock(jsonString); } errorHandler:^(MKNetworkOperation *completedOperation, NSError *error) { errorBlock(error); }]; [op onUploadProgressChanged:^(double progress) { progBlock(progress); }]; [self enqueueOperation:op]; return op;}@end4.现在我们在控制器.m文件中导入这个子类,并且调用它的发送微博的方法,这个接口我们只需要考虑发送的内容以及图片,还有像地图信息,隐私等信息我就没有考虑。良好的设计体验是确保不要将 engine 类中的 URL/HTTPHeaders 暴露给调用者。你的视图不应该知道URL 或者相关的参数。也就是,只需要向 engine 方法传递你需要发送的微博内容,或者你需要的得到什么而需要的参数。由于是异步操作,你应当在块中返回这些值。我在这里就简单处理了,其实我也不清楚把类中的URL在哪里给它更好。
if (_weiboEngine == nil) { _weiboEngine = [[CLPWeiboNetwork alloc] initWithHostName:@"api.weibo.com" customHeaderFields:nil]; } NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"1" ofType:@"jpg"]]; [_weiboEngine sendWeibo:data text:@"带图片微博" onCompletion:^(id result) { NSLog(@"微博:%@",result); } onProgress:^(double progress) { NSLog(@"微博上传进度"); } onError:^(NSError *error) { NSLog(@"错误"); }];也许一条由未通过审核的应用发送就是这样简单。
现在我们该考虑给这个子类再添加几种方法,比如获取微博列表,评论列表etc,就写到这里
0 0
- MKNetworkKit框架的使用
- MKNetworkKit框架使用
- ios MKNetworkKit 的使用
- ios MKNetworkKit 的使用
- ios MKNetworkKit 的使用
- ios MKNetworkKit 的使用
- ios MKNetworkKit 的使用
- ios MKNetworkKit 的使用
- ios MKNetworkKit 的使用
- ios MKNetworkKit 的使用
- MKNetworkKit 的使用
- ios MKNetworkKit 的使用
- ios MKNetworkKit 的使用
- MKNetworkKit 的使用
- ios MKNetworkKit 的使用
- ios MKNetworkKit 的使用
- ios MKNetworkKit 的使用
- MKNetworkKit 详细的使用
- Web中的积累:外观模式 Facade
- 二进制感悟
- 一点技巧
- 【Trie】HDU 1875 Word Puzzle
- C++ Primer 第五版 中文版 练习 13.18 个人code
- MKNetworkKit框架的使用
- 通过UrlConnection调用Webservice服务
- java中Sting.int转换
- 30多年程序员生涯经验总结
- 【原创】【android】【Binder】2 Binder Vs Socket
- S5PV210 LCD控制器
- 【UVALive】4043 Ants KM匹配
- Acdream 1415 最短路+双连通
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容