ios之mknetworkkit笔记
asi没法用了,蛋疼了,在af和mk之间纠结,感觉af不适合我的口味,解析和网络耦合相对似乎重了点
mk似乎默认的不支持下载的断点续传,这里参考网上的代码处理了下,0修改mk的库,下面是实现的代码
//
// RootViewController.m
// webTest
//
// Created by mmc on 13-11-24.
// Copyright (c) 2013年 mmc. All rights reserved.
// #import "RootViewController.h"
#import "MKNetworkEngine.h" @implementation RootViewController - (IBAction) getTest:(id)sender
{
MKNetworkEngine* engine = [[MKNetworkEngine alloc] initWithHostName:@"192.168.1.105:8080"];
[engine useCache]; NSMutableDictionary* params = [NSMutableDictionary dictionaryWithCapacity:];
[params setObject:@"get数据1" forKey:@"arg1"];
[params setObject:@"get数据2" forKey:@"arg2"]; //最后的斜杠不能丢掉,不然会出问题
MKNetworkOperation *operation = [engine operationWithPath:@"/yii/testApp/index.php?r=httpTest/getTest/"
params:params
httpMethod:@"GET"]; [operation addCompletionHandler:^(MKNetworkOperation *completedOperation)
{
NSString *responseString = [completedOperation responseString];
NSLog(@"%@", responseString); if([completedOperation isCachedResponse]) {
NSLog(@"Data from cache %@", [completedOperation responseString]);
}
else {
NSLog(@"Data from server %@", [completedOperation responseString]);
} }errorHandler:^(MKNetworkOperation *errorOp, NSError* error) { NSLog(@"%@",error);
}]; [engine enqueueOperation:operation]; } - (IBAction) postTest:(id)sender
{
MKNetworkEngine* engine = [[MKNetworkEngine alloc] initWithHostName:@"192.168.1.105:8080"];
[engine useCache]; NSMutableDictionary* params = [NSMutableDictionary dictionaryWithCapacity:];
[params setObject:@"post数据1" forKey:@"arg1"];
[params setObject:@"post数据2" forKey:@"arg2"]; MKNetworkOperation *operation = [engine operationWithPath:@"/yii/testApp/index.php?r=httpTest/postTest/"
params:params
httpMethod:@"POST"]; [operation addCompletionHandler:^(MKNetworkOperation *completedOperation)
{
NSString *responseString = [completedOperation responseString];
NSLog(@"%@", responseString); if([completedOperation isCachedResponse]) {
NSLog(@"Data from cache %@", [completedOperation responseString]);
}
else {
NSLog(@"Data from server %@", [completedOperation responseString]);
} }errorHandler:^(MKNetworkOperation *errorOp, NSError* error) { NSLog(@"%@",error);
}]; [engine enqueueOperation:operation];
} - (IBAction) downloadTest:(id)sender
{
MKNetworkEngine* engine = [[MKNetworkEngine alloc] initWithHostName:@"127.0.0.1"];
[engine useCache]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesDirectory = paths[];
NSString *downloadPath = [cachesDirectory stringByAppendingPathComponent:@"x.iso"]; //判断之前是否下载过 如果有下载重新构造Header
NSMutableDictionary *newHeadersDict = [[NSMutableDictionary alloc] init]; NSFileManager *fileManager = [NSFileManager defaultManager]; if ([fileManager fileExistsAtPath:downloadPath])
{
NSError *error = nil;
unsigned long long fileSize = [[fileManager attributesOfItemAtPath:downloadPath error:&error] fileSize]; NSString *headerRange = [NSString stringWithFormat:@"bytes=%llu-", fileSize];
[newHeadersDict setObject:headerRange forKey:@"Range"];
} MKNetworkOperation *operation = [engine operationWithURLString:@"http://192.168.1.105:8080/2.iso"]; [operation addDownloadStream:[NSOutputStream outputStreamToFileAtPath:downloadPath
append:YES]]; [operation addHeaders:newHeadersDict];
[engine enqueueOperation:operation]; //进度回调
[operation onDownloadProgressChanged:^(double progress)
{
NSLog(@"download %.2f", progress*100.0);
}]; //结束回调
[operation addCompletionHandler:^(MKNetworkOperation* completedRequest)
{
NSLog(@"download complete %@", completedRequest);
}errorHandler:^(MKNetworkOperation *errorOp, NSError* error)
{
NSLog(@"%@", error);
}];
} @end
下一步,实现xxxBegin,xxxEnd,xxxFail,然后弄个delegates,做响应链传递,神奇的block,实在受不了,看起来真tmd不是一般的累啊,重回接口回调- -
ios之mknetworkkit笔记的更多相关文章
- iOS 字符串处理笔记
iOS字符串处理笔记,包括如何使用正则表达式解析,NSScanner扫描,设置和使用CoreParse解析器来解析处理自定义符号等内容 搜索 在一个字符串中搜索子字符串 最灵活的方法 - (NSRan ...
- IOS懒人笔记应用源码
这个源码是懒人笔记应用源码,也是一个已经上线的apple应用商店的应用,懒人笔记iOS客户端源码,支持语音识别,即将语音转化成文本文字,所用语音识别类库为讯飞语音类库. 懒人笔记是一款为懒人设计的笔记 ...
- iOS:地图笔记
地图笔记 01. CLLocation -------------------------------------------------------- CLLocationManager 定位管理者 ...
- iOS菜鸟成长笔记(3)——斯坦福公开课学习(1)
一.iOS四层结构 1.Core OS 是用FreeBSD和Mach所改写的Darwin, 是开源.符合POSIX标准的一个Unix核心.这一层包含或者说是提供了整个iPhone OS的一些基础功能, ...
- iOS菜鸟成长笔记(1)——第一个iOS应用
前言:阳光小强最近抽时间学习iOS开发,在学习过程中发现了很多有趣的东西也遇到了很多问题,为了在学习过程中能和大家交流,记录下学习的心得和学习成果,所以就有了这一个系列文章,希望这一系列文章能形成一个 ...
- iOS音频学习笔记二:iOS SDK中与音频有关的相关框架
上层: Media Player Framework: 包含MPMoviePlayerController.MPMoviePlayerViewController.MPMusicPla ...
- iOS音频学习笔记一:常见音频封装格式及编码格式
(1) pcm格式 pcm是经过话筒录音后直接得到的未经压缩的数据流 数据大小=采样频率*采样位数*声道*秒数/8 采样频率一般是22k或者44k,位数一般是8位或者16位,声道一 ...
- iOS开发学习笔记
1 常用的第三方工具 1.1 iPhone Simulator 测试程序需要模拟器iPhone Simulator 1.2 设计界面需要Interface Builder,Interface Buil ...
- iOS并发编程笔记【转】
线程 使用Instruments的CPU strategy view查看代码如何在多核CPU中执行.创建线程可以使用POSIX 线程API,或者NSThread(封装POSIX 线程API).下面是并 ...
随机推荐
- ansible 循环register
在有循环的task中使用register,register保存的是一个列表,整个属性为results results 是一个单个循环返回的结果的列表 - debug: msg="{{ ite ...
- ACCESS修改密码,更新显示
public partial class 修改用户信息frm : Form { public 修改用户信息frm() { InitializeComponent(); } public string ...
- java.c++.c#.c的区别
C++则一般看作是对C语言的扩展. Java语言是一种完全的面向对象语言,虽然它的底层(运行时库)是用C语言开发的,可是并不依赖于C. C#是微软开发的一种编程语言,语法类似Java,几乎就是从Jav ...
- PHP连接MYSQL 报错"No such file or directory"
首先确定是mysql_connect()和mysql_pconnect()的问题,故障现象就是函数返回空,而mysql_error()返回“No such file or directory”. 写个 ...
- 一年内自学MIT的33门课? 疯狂学习有方法
[导读]能快速掌握复杂信息,对成就卓越事业至关重要.ScottYoung的学习过程不只适用于学生,同样有助于学习复杂技能的专业知识. 能快速掌握复杂信息,对成就卓越事业至关重要.ScottYoung的 ...
- BZOJ4899: 记忆的轮廓【概率期望DP】【决策单调性优化DP】
Description 通往贤者之塔的路上,有许多的危机. 我们可以把这个地形看做是一颗树,根节点编号为1,目标节点编号为n,其中1-n的简单路径上,编号依次递增, 在[1,n]中,一共有n个节点.我 ...
- 51Nod 1079:中国剩余定理
1079 中国剩余定理 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 一个正整数K,给出K Mod 一些质数的结果,求符合条件的最小的K.例如,K % ...
- hdu2088
hdu2088 #include<stdio.h> #include<algorithm> using namespace std; ]; int main(){ ; ){ , ...
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(二)-- Web Api Demo
在上一篇里,我已经建立了一个简单的Web-Demo应用程序.这一篇将记录将此Demo程序改造成一个Web Api应用程序. 一.添加ASP.NET Core MVC包 1. 在project.json ...
- Finally什么时候会被执行
PS:有return意味着程序结束,他一定会在程序结束前执行: PS: return返回前 会把数据存储到指定的位置,基本类型是不会改变的.引用类型是会影响修改的值的