iOS 05-使用AFNetworking框架创建下载任务
2017-09-07 16:40
281 查看
一、使用Cocoapods库管理工具下载AFNetworking框架
设置你的Cocoapods
先要确保你已经安装了Cocoapods。为此,打开命令行程序,并输入。
which pod
你将会看到类似这样的输出:
/usr/bin/pod
如果命令行简单的返回提示,或显示pod not found,表示Cocoapods未安装在你的机器上
使用一下命令完成安装:
二、创建一个工程:
例如我们创建一个名为Networking的工程:
然后使用终端切换到工程目录,当前目录下应该有一个.xcodeproj的文件
创建Podfile文件,使用命令:
touch Podfile
打开Podfile文件,添加配置信息:
vim Podfile
使用vim编辑器。输入i进入输入模式,添加如下信息:
platform:ios,'9.0'
target 'Networking' do
pod 'AFNetworking'
end
按下esc,然后输入:wq回车,这是保存并退出命令
在命令行中输入pod install进行安装。
等待下载完成,现在进入我们刚创建的那个工程项目,这时候会发现一个.xcworkspace的文件,打开这个文件。
这时候AFNetworking框架就添加到了我们工程中
ViewController.m中导入框架并定义一个URL,这是一首歌曲下载链接
#import <AFNetworking.h>
#define MP3_URL @"http://so1.111ttt.com:8282/2016/5/12m/10/205101338233.m4a?tflag=1504768534&pin=0b4c71c40af30e63e9b5abef4bf5c3b5&ip=111.85.134.190#.mp3"
@interface ViewController ()
@end
创建一个方法:
-(void)downloadTask {
//1.定义一个管理器
AFHTTPSessionManager *manager = [AFHTTPSessionManager
manager];
//下载任务
NSURLRequest *request = [NSURLRequest
requestWithURL:[NSURL
URLWithString:MP3_URL]];
// progress参数:AFNetWorking 3.0
之后传入的将是block,进度操作在block中完成
//进度
/*
@property int64_t totalUnitCount;
总共的
@property int64_t completedUnitCount;
下载的数据长度
*/
NSURLSessionDownloadTask *task = [manager
downloadTaskWithRequest:request
progress:^(NSProgress *downloadProgress){
// 使用KVO检测进度
[downloadProgress addObserver:self
forKeyPath:@"completedUnitCount"
options:NSKeyValueObservingOptionNew
context:nil];
} destination:^NSURL *
_Nonnull(NSURL *
_Nonnull targetPath, NSURLResponse *
_Nonnull response) {
// NSLog(@"--%@--", targetPath);
//返回下载文件存放位置
NSString *location = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
NSUserDomainMask, YES)lastObject]
stringByAppendingPathComponent:response.suggestedFilename];
// NSLog(@"下载位置=%@",[NSURL fileURLWithPath:location]);
return [NSURL
fileURLWithPath:location];
} completionHandler:^(NSURLResponse *
_Nonnull response, NSURL *
_Nullable filePath, NSError *
_Nullable error) {
// NSLog(@"---filePath=%@",filePath);
// NSLog(@"error = %@",error);
}];
// 开启任务
[task resume];
}
//检测进度方法
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id>
*)change context:(void *)context
{
//强制类型转换
NSProgress *progress = (NSProgress *)object;
NSLog(@"下载进度 = %f%%",100.0*progress.completedUnitCount
/ progress.totalUnitCount);
}
// 点击屏幕后调用方法:
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent
*)event
{
[self
downloadTask];
}
打印结果:
设置你的Cocoapods
先要确保你已经安装了Cocoapods。为此,打开命令行程序,并输入。
which pod
你将会看到类似这样的输出:
/usr/bin/pod
如果命令行简单的返回提示,或显示pod not found,表示Cocoapods未安装在你的机器上
使用一下命令完成安装:
sudo gem install cocoapods
二、创建一个工程:
例如我们创建一个名为Networking的工程:
然后使用终端切换到工程目录,当前目录下应该有一个.xcodeproj的文件
创建Podfile文件,使用命令:
touch Podfile
打开Podfile文件,添加配置信息:
vim Podfile
使用vim编辑器。输入i进入输入模式,添加如下信息:
platform:ios,'9.0'
target 'Networking' do
pod 'AFNetworking'
end
按下esc,然后输入:wq回车,这是保存并退出命令
在命令行中输入pod install进行安装。
等待下载完成,现在进入我们刚创建的那个工程项目,这时候会发现一个.xcworkspace的文件,打开这个文件。
这时候AFNetworking框架就添加到了我们工程中
ViewController.m中导入框架并定义一个URL,这是一首歌曲下载链接
#import <AFNetworking.h>
#define MP3_URL @"http://so1.111ttt.com:8282/2016/5/12m/10/205101338233.m4a?tflag=1504768534&pin=0b4c71c40af30e63e9b5abef4bf5c3b5&ip=111.85.134.190#.mp3"
@interface ViewController ()
@end
创建一个方法:
-(void)downloadTask {
//1.定义一个管理器
AFHTTPSessionManager *manager = [AFHTTPSessionManager
manager];
//下载任务
NSURLRequest *request = [NSURLRequest
requestWithURL:[NSURL
URLWithString:MP3_URL]];
// progress参数:AFNetWorking 3.0
之后传入的将是block,进度操作在block中完成
//进度
/*
@property int64_t totalUnitCount;
总共的
@property int64_t completedUnitCount;
下载的数据长度
*/
NSURLSessionDownloadTask *task = [manager
downloadTaskWithRequest:request
progress:^(NSProgress *downloadProgress){
// 使用KVO检测进度
[downloadProgress addObserver:self
forKeyPath:@"completedUnitCount"
options:NSKeyValueObservingOptionNew
context:nil];
} destination:^NSURL *
_Nonnull(NSURL *
_Nonnull targetPath, NSURLResponse *
_Nonnull response) {
// NSLog(@"--%@--", targetPath);
//返回下载文件存放位置
NSString *location = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
NSUserDomainMask, YES)lastObject]
stringByAppendingPathComponent:response.suggestedFilename];
// NSLog(@"下载位置=%@",[NSURL fileURLWithPath:location]);
return [NSURL
fileURLWithPath:location];
} completionHandler:^(NSURLResponse *
_Nonnull response, NSURL *
_Nullable filePath, NSError *
_Nullable error) {
// NSLog(@"---filePath=%@",filePath);
// NSLog(@"error = %@",error);
}];
// 开启任务
[task resume];
}
//检测进度方法
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id>
*)change context:(void *)context
{
//强制类型转换
NSProgress *progress = (NSProgress *)object;
NSLog(@"下载进度 = %f%%",100.0*progress.completedUnitCount
/ progress.totalUnitCount);
}
// 点击屏幕后调用方法:
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent
*)event
{
[self
downloadTask];
}
打印结果:
相关文章推荐
- 【iOS开发-网络】使用NSURLSessionDownloadTask下载任务(不能知道下载进度)
- 【iOS开发-网络】使用NSURLSessionDownloadTask下载任务(有下载进度)
- 使用多线程创建下载任务
- iOS 使用Cocoa(非POSIX) 创建的线程必须创建自动释放池
- 在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统(源代码下载和PDF文档下载)
- 在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统(源代码下载和PDF文档下载)(转载)
- 在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统(源代码下载和PDF文档下载)
- 在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统(源代码下载和PDF文档下载)
- 使用 Outlook 在 SharePoint 网站上查看和创建任务
- VxWorks下消息、信号量的使用和任务创建
- VxWorks下消息、信号量的使用和任务创建
- 使用T_SQL脚本创建SQLServer2000后台计划作业任务
- 在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统(源代码下载和PDF文档下载)
- [转]使用 ASP.NET MVC 创建一个任务列表应用程序
- 使用 ASP.NET MVC 创建一个任务列表应用程序
- 使用Create task with ContentType创建任务的时候,必须先在task list中加上该ContentType
- 使用 Outlook 在 SharePoint 网站上查看和创建任务
- 使用linux的Proftpd创建FTP服务器时的一些高级设置(开放续上传,续下载功能)
- 在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统(源代码下载和PDF文档下载)
- 使用 Visual Studio Tools for Office 创建自定义任务窗格