getTasksWithCompletionHandler的用法
最近在学习iOS的NSSession的后台下载,使用getTasksWithCompletionHandler获取下载任务时候,发现一些问题,希望分享一下;
第一次写博客有点乱,大家不要见怪~~
NSURLSession *flickrDownloadSession;
[flickrDownloadSession getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
if (![downloadTasks count]) {
NSURLSessionDownloadTask * task = [self.flickrDownloadSession
downloadTaskWithURL:[FlickrFetcher URLforRecentGeoreferencedPhotos]]; task.taskDescription = FLICKR_FETCH;
[task resume];
}else{
for(NSURLSessionDownloadTask *task in downloadTasks) [task resume];
}
}];
- (NSURLSession *)flickrDownloadSession{
if (!_flickrDownloadSession) {
static dispatch_once_t onceToken;
dispatch_once(&onceToken,^{
NSURLSessionConfiguration *urlConfig = [NSURLSessionConfiguration backgroundSessionConfiguration:FLICKR_FETCH];
urlConfig.allowsCellularAccess = NO;
_flickrDownloadSession = [NSURLSession sessionWithConfiguration:urlConfig delegate:self delegateQueue:nil];
});
} return _flickrDownloadSession;
}
//当任务下载完成之后会执行该委托
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{
if ([downloadTask.taskDescription isEqualToString:FLICKR_FETCH]) {
NSManagedObjectContext * context = self.photoDataBaseContext;
if (context) {
NSArray * photos = [self flickrphotosAtURL:location];//Call 1
[context performBlock:^{
[Photo loadPhotosFromFlickr:photos inManageObjectContext:context];
[context save:NULL];
}];
}else{
[self flickrDownloadTaskMightBeComplete];//Call2
}
}
}
这个方法执行于主队列,但是后面的那个Block语句 ^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {}
block 执行是在另外一个代理队列;一般通过判断downloadTasks数组的个数来计算现在还有多少个下载任务没有被完成,也就是还没执行didFinishDownloadingToURL委托,来设置下载任务;
当在xcode5的仿真器上仿真时,无论删除程序还是怎么样,当发起来 getTasksWithCompletionHandler,只要没有下载完,那么 [downloadTasks count]就会一直为1,但是当真机器调试的时候,只要删除任务,那么[downloadTasks count]就为0,还有如果长时间发起了任务而一直没有得到下载结果,系统会自动杀死该程序;
getTasksWithCompletionHandler的用法的更多相关文章
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- python enumerate 用法
A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...
- [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...
- 【JavaScript】innerHTML、innerText和outerHTML的用法区别
用法: <div id="test"> <span style="color:red">test1</span> tes ...
- chattr用法
[root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...
- 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)
vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...
随机推荐
- 2015.7.17 case when then else end用法Oralcle与SQLserver一致
SELECT CASE airway_point_type_id WHEN 1 THEN 'VOR' WHEN 2 THEN 'VOR/DME' WHEN 3 THEN 'NDB' WHEN 10 T ...
- Canopy聚类算法(经典,看图就明白)
只有这个算法思想比较对,其他 的都没有一开始的remove: 原网址:http://www.shahuwang.com/?p=1021 Canopy Clustering 这个算法是2000年提出来的 ...
- IT求职经验分享
本来这些东西应该早点写出来,之前由于一些事情的顾虑迟迟没有发表下笔整理并发表出来.最近及接下来的日子是校招找工作的关键时期,结合自己之前找暑期实习的过程及笔试面试经历(主要是三家,腾讯.360.绿盟科 ...
- leetcode633
用开方的思想来解题. bool judgeSquareSum(int c) { int h = pow(c, 0.5); ; i <= h; i++) { ), 0.5); if (left - ...
- leetcode482
这道题主要使用了C++的几个API,大小写转化,字符串替换.其余的逻辑都比较简单.而且经查资料,string类字符串拼接的速度使用+=的速度是很快的.以下代码,也是用的+=来拼接字符串. string ...
- select 动态添加option函数
转自:https://lym6520.iteye.com/blog/309937 经常会用到select动态添加元素,写了个方法,方便调用! ... /** * 功能:select对象动态添加Opt ...
- opengl版本和扩展
检查自己的OpenGL版本 可以很容易的知道自己系统中的OpenGL版本,方法就是调用glGetString函数. const char* version = (const char*)glGetSt ...
- java执行linux命令的工具类
package com.starfast.common.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ja ...
- 每天一道算法题目(18)——取等长有序数组的上中位数和不等长有序数组的第k小的数
1.取上中位数 题目: 给定两个有序数组arr1和arr2,两个数组长度都为N,求两个数组中所有数的上中位数.要求:时间复杂度O(logN). 例如: arr1 = {1, ...
- Maven学习笔记1-牛逼的POM文件
IDE:integrated development enterprise 集成开发环境: 一.pom文件 POM是项目对象模型(Project Object Model)的简称:maven世界中必须 ...