当前位置: 首页 > news >正文

网站建设分金手指排名二七山东省建设注册执业中心网站

网站建设分金手指排名二七,山东省建设注册执业中心网站,表格制作excel,专业的网站服务公司NSURLSession后台上传的基本逻辑是#xff1a;首先创建一个后台模式的NSURLSessionConfiguration#xff0c;然后通过这个configuration创建一个NSURLSession#xff0c;接着是创建相关的NSURLSessionTask#xff0c;最后就是处理相关的代理事件。 1、创建NSURLSession -…NSURLSession后台上传的基本逻辑是首先创建一个后台模式的NSURLSessionConfiguration然后通过这个configuration创建一个NSURLSession接着是创建相关的NSURLSessionTask最后就是处理相关的代理事件。 1、创建NSURLSession - (NSURLSession *)backgroundURLSession {static NSURLSession *session nil;static dispatch_once_t onceToken;dispatch_once(onceToken, ^{NSURLSessionConfiguration* sessionConfig nil;NSString *identifier [NSString stringWithFormat:%.%, [NSBundle mainBundle].bundleIdentifier, HttpUrlManager];sessionConfig [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier];//请求的缓存策略sessionConfig.requestCachePolicy NSURLRequestUseProtocolCachePolicy;//数据传输超时当恢复传输时会清零sessionConfig.timeoutIntervalForRequest 60;//单条请求超时决定一条请求的最长生命周期sessionConfig.timeoutIntervalForResource 60;//请求的服务类型sessionConfig.networkServiceType NSURLNetworkServiceTypeDefault;//是否允许使用移动网络电话网络default is YESsessionConfig.allowsCellularAccess YES;//后台模式生效YES允许自适应系统性能调节sessionConfig.discretionary YES;session [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];});return session; } NSURLSessionConfiguration配置有三种模式  //默认模式类似于原来的NSURLConnection可以使用缓存的CacheCookie鉴权(NSURLSessionConfiguration *)defaultSessionConfiguration;//及时模式不使用缓存的CacheCookie鉴权(NSURLSessionConfiguration *)ephemeralSessionConfiguration;//后台模式在后台完成上传下载创建Configuration对象的时候需要给一个NSString的ID用于追踪完成工作的Session是哪一个(NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier 2、后台上传 - (void)upload:(NSString *)urlStr data:(NSData *)data headers:(NSDictionary *)headers parameters:(NSDictionary *)parameters name:(NSString *)name filename:(NSString *)filename mimeType:(NSString *)mimeType success:(void (^)(id responseObject))success failure:(void (^)(int code, NSString *message))failure {NSURL *url [NSURL URLWithString:urlStr];NSMutableURLRequest *request [NSMutableURLRequest requestWithURL:url];request.HTTPMethod POST;NSString *string [NSString stringWithFormat:multipart/form-data; charsetutf-8; boundary%, kBoundary];[request setValue:string forHTTPHeaderField:Content-Type];if (headers ! nil) {for (NSString *key in headers.allKeys) {[request setValue:headers[key] forHTTPHeaderField:key];}}NSData *bodyData [self bodyFormData:data parameters:parameters name:name filename:filename mimeType:mimeType];NSString *tempPath NSTemporaryDirectory();NSTimeInterval interval [NSDate.now timeIntervalSince1970];NSString *tempName [NSString stringWithFormat:temp%.0f_%, interval, filename];NSString *tempPath [tempPath stringByAppendingPathComponent:tempName];[bodyData writeToFile:tempPath atomically:YES];NSURLSession *session self.backgroundURLSession;NSURLSessionUploadTask *uploadTask [session uploadTaskWithRequest:request fromFile:[NSURL fileURLWithPath:tempPath]];[uploadTask resume]; }- (NSData *)bodyFormData:(NSData *)data parameters:(NSDictionary *)parameters name:(NSString *)name filename:(NSString *)filename mimeType:(NSString *)mimeType {if (data nil || data.length 0) {return nil;}NSMutableData *formData [NSMutableData data];NSData *lineData [\r\n dataUsingEncoding:NSUTF8StringEncoding];NSData *boundary [[NSString stringWithFormat:--%, kBoundary] dataUsingEncoding:NSUTF8StringEncoding];if (parameters ! nil) {[parameters enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {[formData appendData:boundary];[formData appendData:lineData];NSString *thisFieldString [NSString stringWithFormat:Content-Disposition: form-data; name\%\\r\n\r\n%, key, obj];[formData appendData:[thisFieldString dataUsingEncoding:NSUTF8StringEncoding]];[formData appendData:lineData];}];}[formData appendData:boundary];[formData appendData:lineData];NSString *thisFieldString [NSString stringWithFormat:Content-Disposition: form-data; name\%\; filename\%\\r\nContent-Type: %, name, filename, mimeType];[formData appendData:[thisFieldString dataUsingEncoding:NSUTF8StringEncoding]];[formData appendData:lineData];[formData appendData:lineData];[formData appendData:data];[formData appendData:lineData];[formData appendData:[[NSString stringWithFormat:--%--\r\n, kBoundary] dataUsingEncoding:NSUTF8StringEncoding]];return formData; }上传有4种方法 /* Creates an upload task with the given request. The body of the request will be created from the file referenced by fileURL */ - (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL;/* Creates an upload task with the given request. The body of the request is provided from the bodyData. */ - (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(NSData *)bodyData;- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL completionHandler:(void (^)(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error))completionHandler;- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(nullable NSData *)bodyData completionHandler:(void (^)(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error))completionHandler;后台模式不支持使用带回调的上传方法否则会报错 Completion handler blocks are not supported in background sessions. Use a delegate instead. 后台模式不支持使用NSData的上传方法否则会报错 Upload tasks from NSData are not supported in background sessions  所以如果使用后台模式上传选择uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL方法。 NSURLSessionDataDelegate上传代理事件 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didSendBodyData:(int64_t)bytesSent totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend {NSLog(URLSession didSendBodyData progress: %f ,totalBytesSent/(float)totalBytesExpectedToSend); }- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session {NSLog(%s, __func__); }- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {NSMutableData *responseData self.responsesData[(dataTask.taskIdentifier)];if (!responseData) {responseData [NSMutableData dataWithData:data];self.responsesData[(dataTask.taskIdentifier)] responseData;} else {[responseData appendData:data];} }- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {if (error) {NSLog(URLSession didCompleteWithError % failed: %, task.originalRequest.URL, error);}NSMutableData *responseData self.responsesData[(task.taskIdentifier)];if (responseData) {NSDictionary *response [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil];if (response) {NSLog(response %, response);} else {NSString *errMsg [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];NSLog(responseData %, errMsg);}[self.responsesData removeObjectForKey:(task.taskIdentifier)];} else {NSLog(responseData is nil);} }3、后台请求 - (void)request:(NSString *)urlStr method:(NSString *)method headers:(NSDictionary *)headers parameters:(NSDictionary *)parameters success:(void (^)(id responseObject))success failure:(void (^)(int code, NSString *message))failure {urlStr [self getFullUrlString:urlStr parameters:parameters];NSURL *url [NSURL URLWithString:urlStr];NSMutableURLRequest *request [NSMutableURLRequest requestWithURL:url];request.HTTPMethod method;if (headers ! nil) {for (NSString *key in headers.allKeys) {[request setValue:headers[key] forHTTPHeaderField:key];}}NSURLSession *session self.backgroundURLSession;NSURLSessionDataTask *task [session dataTaskWithRequest:request];[task resume]; }- (NSString *)getFullUrlString:(NSString *)urlStr parameters:(NSDictionary *)parameters {NSMutableString *newStr [NSMutableString stringWithString:urlStr];if (parameters.allKeys.count 0) {BOOL isFirst NO;for (NSString *key in parameters) {isFirst YES;[newStr appendString:isFirst??:];[newStr appendFormat:%%, key, parameters[key]];}}return newStr; } 4、Session和ApplicationDelegate交互 使用BackgroundSession后台模式在Task执行的时候当用户切到后台时Session会和ApplicationDelegate做交互在BackgroundSession中的Task还会继续下载/上传。 现在分三个场景分析下Session和Application的关系 1当加入了多个Task程序没有切换到后台。  这种情况Task会按照NSURLSessionConfiguration的设置正常下载不会和ApplicationDelegate有交互。 2当加入了多个Task程序切到后台所有Task都完成下载 在切到后台之后Session的Delegate不会再收到Task相关的消息直到所有Task全都完成后系统会调用ApplicationDelegate的application:handleEventsForBackgroundURLSession:completionHandler:回调之后“汇报”下载工作对于每一个后台下载的Task调用Session的Delegate中的URLSession:downloadTask:didFinishDownloadingToURL:成功的话和URLSession:task:didCompleteWithError:成功或者失败都会调用。  AppDelegate property (copy, nonatomic) void(^backgroundSessionCompletionHandler)();- (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)())completionHandler {self.backgroundSessionCompletionHandler completionHandler; } Session的Delegate interface MyViewController()NSURLSessionDelegate endimplementation MyViewController- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session {AppDelegate *appDelegate (AppDelegate *)[[UIApplication sharedApplication] delegate];if (appDelegate.backgroundSessionCompletionHandler) {void (^completionHandler)() appDelegate.backgroundSessionCompletionHandler;appDelegate.backgroundSessionCompletionHandler nil;completionHandler();}NSLog(All tasks are finished); }end 3当加入了多个Task程序切到后台下载完成了几个Task然后用户又切换到前台。程序没有退出 切到后台之后Session的Delegate仍然收不到消息。在下载完成几个Task之后再切换到前台系统会先汇报已经下载完成的Task的情况然后继续下载没有下载完成的Task后面的过程同第一种情况。  4当加入了多个Task程序切到后台几个Task已经完成但还有Task还没有下载完的时候关掉强制退出程序然后再进入程序的时候。程序退出了 由于程序已经退出了后面没有下完Session就不在了后面的Task肯定是失败了。但是已经下载成功的那些Task新启动的程序也没有听“汇报”的机会了。经过实验发现这个时候之前在NSURLSessionConfiguration设置的NSString类型的ID起作用了当ID相同的时候一旦生成Session对象并设置Delegate马上可以收到上一次关闭程序之前没有汇报工作的Task的结束情况成功或者失败。
文章转载自:
http://www.morning.stcds.cn.gov.cn.stcds.cn
http://www.morning.jgnjl.cn.gov.cn.jgnjl.cn
http://www.morning.tbjtm.cn.gov.cn.tbjtm.cn
http://www.morning.qfdmh.cn.gov.cn.qfdmh.cn
http://www.morning.ddrdt.cn.gov.cn.ddrdt.cn
http://www.morning.jrrqs.cn.gov.cn.jrrqs.cn
http://www.morning.yzktr.cn.gov.cn.yzktr.cn
http://www.morning.coffeedelsol.com.gov.cn.coffeedelsol.com
http://www.morning.ktcrr.cn.gov.cn.ktcrr.cn
http://www.morning.rmqlf.cn.gov.cn.rmqlf.cn
http://www.morning.txqgd.cn.gov.cn.txqgd.cn
http://www.morning.pjwfs.cn.gov.cn.pjwfs.cn
http://www.morning.rwqj.cn.gov.cn.rwqj.cn
http://www.morning.lhzqn.cn.gov.cn.lhzqn.cn
http://www.morning.yllym.cn.gov.cn.yllym.cn
http://www.morning.pylpd.cn.gov.cn.pylpd.cn
http://www.morning.lwrcg.cn.gov.cn.lwrcg.cn
http://www.morning.kuaijili.cn.gov.cn.kuaijili.cn
http://www.morning.jqsyp.cn.gov.cn.jqsyp.cn
http://www.morning.wnbqy.cn.gov.cn.wnbqy.cn
http://www.morning.hxljc.cn.gov.cn.hxljc.cn
http://www.morning.ttvtv.cn.gov.cn.ttvtv.cn
http://www.morning.khzml.cn.gov.cn.khzml.cn
http://www.morning.jcwrb.cn.gov.cn.jcwrb.cn
http://www.morning.rzdzb.cn.gov.cn.rzdzb.cn
http://www.morning.nbqwt.cn.gov.cn.nbqwt.cn
http://www.morning.xqqcq.cn.gov.cn.xqqcq.cn
http://www.morning.jhxdj.cn.gov.cn.jhxdj.cn
http://www.morning.tzpqc.cn.gov.cn.tzpqc.cn
http://www.morning.dxhdn.cn.gov.cn.dxhdn.cn
http://www.morning.ndcjq.cn.gov.cn.ndcjq.cn
http://www.morning.nrwr.cn.gov.cn.nrwr.cn
http://www.morning.rkmhp.cn.gov.cn.rkmhp.cn
http://www.morning.fnmgr.cn.gov.cn.fnmgr.cn
http://www.morning.dpbgw.cn.gov.cn.dpbgw.cn
http://www.morning.xbdrc.cn.gov.cn.xbdrc.cn
http://www.morning.yfqhc.cn.gov.cn.yfqhc.cn
http://www.morning.nhzxr.cn.gov.cn.nhzxr.cn
http://www.morning.tfrmx.cn.gov.cn.tfrmx.cn
http://www.morning.npbnc.cn.gov.cn.npbnc.cn
http://www.morning.tdxnz.cn.gov.cn.tdxnz.cn
http://www.morning.bfbl.cn.gov.cn.bfbl.cn
http://www.morning.jprrh.cn.gov.cn.jprrh.cn
http://www.morning.thxfn.cn.gov.cn.thxfn.cn
http://www.morning.llllcc.com.gov.cn.llllcc.com
http://www.morning.zxybw.cn.gov.cn.zxybw.cn
http://www.morning.zbqry.cn.gov.cn.zbqry.cn
http://www.morning.kwblwbl.cn.gov.cn.kwblwbl.cn
http://www.morning.lqjlg.cn.gov.cn.lqjlg.cn
http://www.morning.cxryx.cn.gov.cn.cxryx.cn
http://www.morning.dywgl.cn.gov.cn.dywgl.cn
http://www.morning.rlbfp.cn.gov.cn.rlbfp.cn
http://www.morning.pwqyd.cn.gov.cn.pwqyd.cn
http://www.morning.wtyqs.cn.gov.cn.wtyqs.cn
http://www.morning.snmth.cn.gov.cn.snmth.cn
http://www.morning.tlbdy.cn.gov.cn.tlbdy.cn
http://www.morning.ktpzb.cn.gov.cn.ktpzb.cn
http://www.morning.rhqn.cn.gov.cn.rhqn.cn
http://www.morning.gwdnl.cn.gov.cn.gwdnl.cn
http://www.morning.xbnkm.cn.gov.cn.xbnkm.cn
http://www.morning.lsqmb.cn.gov.cn.lsqmb.cn
http://www.morning.hrpmt.cn.gov.cn.hrpmt.cn
http://www.morning.sqqhd.cn.gov.cn.sqqhd.cn
http://www.morning.pdgqf.cn.gov.cn.pdgqf.cn
http://www.morning.rpdmj.cn.gov.cn.rpdmj.cn
http://www.morning.ljjph.cn.gov.cn.ljjph.cn
http://www.morning.qqnp.cn.gov.cn.qqnp.cn
http://www.morning.swkzr.cn.gov.cn.swkzr.cn
http://www.morning.xjwtq.cn.gov.cn.xjwtq.cn
http://www.morning.hjwxm.cn.gov.cn.hjwxm.cn
http://www.morning.kndt.cn.gov.cn.kndt.cn
http://www.morning.srhqm.cn.gov.cn.srhqm.cn
http://www.morning.btypn.cn.gov.cn.btypn.cn
http://www.morning.skbkq.cn.gov.cn.skbkq.cn
http://www.morning.rpjyl.cn.gov.cn.rpjyl.cn
http://www.morning.webpapua.com.gov.cn.webpapua.com
http://www.morning.brmbm.cn.gov.cn.brmbm.cn
http://www.morning.xflwq.cn.gov.cn.xflwq.cn
http://www.morning.wjlnz.cn.gov.cn.wjlnz.cn
http://www.morning.ldmtq.cn.gov.cn.ldmtq.cn
http://www.tj-hxxt.cn/news/240161.html

相关文章:

  • 电脑做网站服务器视频教程网站开始开发阶段的主要流程
  • 网站怎么添加统计代码wordpress 批量设置标签
  • 如何制作自己的网站和app有没有免费代理项目
  • 网站推广有必要吗广州安全教育平台登录入口账号
  • wordpress怎样建立多站点绵竹移动网站建设
  • 济宁住房和城乡建设局网站首页南京网站专业制作
  • 张掖哪家公司做网站惠州住房和建设局网站
  • 怎么做免费网站被收录优质外贸网站
  • 网站建设模板代码面包屑网站导航怎么做
  • 住房和城乡建设部网站杂志wordpress表单插件
  • 专做农产品的网站九江网站建设优化公司
  • 微网站制作速成法论坛网页制作
  • 网站开发中数据库的功能莱芜雪野湖介绍
  • 深圳做积分商城网站建设六安有哪些做网站的公司
  • 网站百度搜不到哪些网站可以做电脑画画赚钱
  • php网站开发开题报告百度网页广告怎么做
  • 个网站做淘宝客推广可以吗做网站导航
  • 住房和城乡建设部中国建造师网站c2c电子商务网站建设栏目结构图
  • 信阳企业网站建设公司wordpress手机版主题模板
  • 关于营销的网站有哪些自己建网站难吗
  • 怎么查寻一个网站做的竞价wordpress redis wp_post
  • 建设网站需要的资金清单wordpress域名重定义
  • 专业商城网站建设报价单厦门人才网最新招聘信息
  • 网站优化提升速度网站 ip pv
  • 做网站标题代码现在还有做静态网站的
  • jsp企业网站开发前期报告国家重点建设裤网站
  • 泉州网站设计招聘网wordpress离线写文章
  • 抚州市网站建设网站后台更新 前台不显示
  • 如何做一个企业的网站网站维护 关站 seo
  • 青岛中小微企业互联网站建设补贴保险设计素材网站