




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、iOS 8.0后臺任務(wù)長期運行方案后臺運行方案實現(xiàn)方式為:BackgroundRunner+NSURLSession1. 配置2. 在AppDelegate中property (assign, nonatomic) BOOL isBackground; /判讀是否是后臺運行-(void)applicationDidEnterBackground:(UIApplication *)applicationBackgroundRunner shared run;self.isBackground = yes;/在回到界面后關(guān)閉后臺運行-(void)applicationWillEnterForegr
2、ound:(UIApplication *)application BackgroundRunner shared stop;self.isBackground = NO;3. 手機(jī)密碼鎖開啟后的文件保護(hù)問題設(shè)置/設(shè)置常量#define UrlsessionDownload "/com.apple.nsurlsessiond/Downloads/"#define BundleIdentifier NSBundle mainBundle bundleIdentifier/打開uisesion目錄的文件保護(hù)設(shè)置為無/創(chuàng)建可使用的urlseseion路徑-(void)create
3、UrlSession NSString *theFMCachePath=nil; NSArray *pathes = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); theFMCachePath = pathes objectAtIndex:0; theFMCachePath = theFMCachePath stringByAppendingString:UrlsessionDownload; theFMCachePath = theFMCachePath stringByAppen
4、dingString:NSString stringWithFormat:"%/",BundleIdentifier; NSFileManager *fileManager = NSFileManager defaultManager; if(!fileManager isExecutableFileAtPath:theFMCachePath)/設(shè)置文件為無權(quán)限保護(hù) NSDictionary *attributes = NSDictionary dictionaryWithObject:NSFileProtectionNone forKey:NSFileProtection
5、Key; fileManager createDirectoryAtPath:theFMCachePath withIntermediateDirectories:YES attributes:attributes error:nil; 4上傳sessioin的代碼,(UploadSessionBackgound.h, UploadSessionBackgound.m)/UploadSessionBackgound.h#import <Foundation/Foundation.h>protocol UploadSessionBackgoundDelegate <NSObje
6、ct>-(void)requestUploadFinishDictionary:(NSDictionary *)dictionary;endinterface UploadSessionBackgound : NSObject<NSURLSessionDataDelegate>property(nonatomic, strong) NSURLSession *urlSession;property(nonatomic, strong) NSURLSessionUploadTask *sesssionDataTask;property(nonatomic, weak) id&l
7、t;UploadSessionBackgoundDelegate> sessioinDelegate;-(void)startBackground:(NSMutableURLRequest *)request;-(void)stopUploadBackground;end/UploadSessionBackgound.m#import "UploadSessionBackgound.h"implementation UploadSessionBackgoundsynthesize urlSession,sesssionDataTask,sessioinDelegate
8、;-(NSURLSession *)urlSession static NSURLSession *session; static dispatch_once_t onceToken; dispatch_once(&onceToken, NSURLSessionConfiguration *backgroundConfigObject = NSURLSessionConfiguration backgroundSessionConfiguration: "com.zhouhe.Edunbao.UploadSessionBackgound" session = NSU
9、RLSession sessionWithConfiguration:backgroundConfigObject delegate:self delegateQueue:nil; ); return session;-(void)startBackground:(NSMutableURLRequest *)request self.sesssionDataTask = self.urlSession uploadTaskWithStreamedRequest:request; self.sesssionDataTask resume;-(void)stopUploadBackground s
10、elf.sesssionDataTask cancel;- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data; if(data=nil) self.sessioinDelegate requestUploadFinishDictionary:nil; return; NSDictionary *dict = NSJSONSerialization JSONObjectWithData:data options:0 err
11、or:nil; NSLog("dict:%",dict); self.sessioinDelegate requestUploadFinishDictionary:dict;- (void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error self.sessioinDelegate requestUploadFinishDictionary:nil;end上傳session寫好后,下面就可以使用這個session了,每個應(yīng)用上傳接口都不一樣,但是最終會調(diào)用上傳,我這里的
12、方式是上傳的信息全部在NSMutableURLRequest中,NSMutableURLRequest就大概說下NSMutableURLRequest *request=NSMutableURLRequest requestWithURL:s_url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:CONNECT_TIMEOUT; request setHTTPBody:data; request setHTTPMethod:"PUT"s_url:上傳的接口url,如CONNECT_T
13、IMEOUT:超時時間,如:60data:將要上傳的nsdata數(shù)據(jù)上傳完成后回調(diào)方法:-(void)requestUploadFinishDictionary:(NSDictionary *)dictionary/處理邏輯5.很多上傳邏輯中并不是僅僅包含上傳文件的業(yè)務(wù),也有很多普通的網(wǎng)絡(luò)請求,我們來說說如何把普通的網(wǎng)絡(luò)請求也和urlsession方式處理,(SeesionConnection.h, SeesionConnection.m)/ SeesionConnection.h#import <Foundation/Foundation.h>protocol SeesionCo
14、nnectionDelegate <NSObject>-(void)requestSeesionConnectionDictionary:(NSDictionary *)dictionary;endinterface SeesionConnection : NSObjectproperty(nonatomic, strong) NSURLSession *urlSession;property(nonatomic, strong) NSURLSessionDownloadTask *sesssionDataTask;property(nonatomic, weak) id<S
15、eesionConnectionDelegate> sessioinDelegate;-(void)startBackground:(NSMutableURLRequest *)request;-(void)stopDownBackground;end/ SeesionConnection.m#import "SeesionConnection.h"implementation SeesionConnectionsynthesize urlSession,sesssionDataTask,sessioinDelegate;-(NSURLSession *)urlSes
16、sion static NSURLSession *session; static dispatch_once_t onceToken; dispatch_once(&onceToken, NSURLSessionConfiguration *backgroundConfigObject = NSURLSessionConfiguration backgroundSessionConfiguration: "com.zhouhe.Edunbao.SeesionConnection" session = NSURLSession sessionWithConfigur
17、ation:backgroundConfigObject delegate:self delegateQueue:nil; ); return session;-(void)startBackground:(NSMutableURLRequest *)request self.sesssionDataTask = self.urlSession downloadTaskWithRequest:request; self.sesssionDataTask resume;-(void)stopDownBackground self.sesssionDataTask cancel;- (void)U
18、RLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location NSFileManager *fileManager = NSFileManager defaultManager; NSData *data = NSData dataWithContentsOfURL:location; if(data=nil) self.sessioinDelegate requestSeesionConnec
19、tionDictionary:nil; NSError *error; fileManager removeItemAtURL:location error:&error; NSLog("error:%",error); return; NSDictionary *dict = NSJSONSerialization JSONObjectWithData:data options:0 error:nil; NSLog("dict:%",dict); self.sessioinDelegate requestSeesionConnectionDic
20、tionary:dict; NSError *error; fileManager removeItemAtURL:location error:&error; NSLog("error:%",error);- (void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error self.sessioinDelegate requestSeesionConnectionDictionary:nil;end網(wǎng)路請求的session寫好后就是調(diào)用了SessionVerif
21、yBackground *sessioinVerifyBackground = SessionVerifyBackground alloc init; sessioinVerifyBackground setSessioinDelegate:self; sessioinVerifyBackground startBackground:request;request:自己去創(chuàng)建吧,NSMutableURLRequest類,-(void)requestSeesionConnectionDictionary:(NSDictionary *)dictionary/這里處理邏輯6.下載session的代
22、碼(DownSessionBackground.h, DownSessionBackground.m)/ DownSessionBackground.h#import <Foundation/Foundation.h>interface DownSessionBackground : NSObject<NSURLSessionDownloadDelegate>property(nonatomic, assign) BOOL isBackGround;property(nonatomic, strong, readonly) NSURLSession *urlSessio
23、n;property(nonatomic, strong) NSURLSessionDownloadTask *downloadTask;-(id)init;-(void)startDownBackground;-(void)stopDownBackground;end/ DownSessionBackground.m#import "DownSessionBackground.h"implementation DownSessionBackgroundsynthesize isBackGround,urlSession,downloadTask;-(id)init sta
24、tic DownSessionBackground *background; static dispatch_once_t onceToken; dispatch_once(&onceToken, background = super init; ); return background;-(NSURLSession *)urlSession static NSURLSession *backgroundSession = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, NSURLSessionC
25、onfiguration *config = NSURLSessionConfiguration backgroundSessionConfiguration:"com.shinobicontrols.BackgroundDownload.BackgroundSessions" backgroundSession = NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil; ); return backgroundSession;-(void)startDownBackgrou
26、nd if(self.isBackGround) NSString *url = " NSURLRequest *request = NSURLRequest requestWithURL:NSURL URLWithString:url; self.downloadTask = self.urlSession downloadTaskWithRequest:request; / Start the download self.downloadTask resume; -(void)stopDownBackground self.downloadTask cancel;#pragma
27、mark NSURLSessionDelegate- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite double currentProgress = totalBytesWr
28、itten / (double)totalBytesExpectedToWrite; NSString *percentStr = NSNumberFormatter localizedStringFromNumber:NSNumber numberWithDouble:currentProgress numberStyle:NSNumberFormatterPercentStyle; NSLog("當(dāng)前下載%",percentStr);- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSession
29、DownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location NSLog("下載成功"); NSLog("下載的文件路徑:%",location); NSError *error; NSFileManager *fileManager = NSFileManager defaultManager; NSString *documentDir = self getFMCachePath; NSString *destinationFilename = downloadTask
30、.originalRequest.URL.lastPathComponent; NSArray *array=destinationFilename componentsSeparatedByString:"/" NSString *createPath = NSString stringWithFormat:"%",documentDir; self CreatePath:createPath; NSString *savedPath = NSString stringWithFormat:"%/%",createPath,array lastObject; NSURL *destinationURL = NSURL fileURLWithPath:savedPath; if (fileManager fileExistsAtPath:destinatio
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 陜西郵電職業(yè)技術(shù)學(xué)院《藝術(shù)實踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津財經(jīng)大學(xué)珠江學(xué)院《熱力學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 上海思博職業(yè)技術(shù)學(xué)院《軟飲料工藝學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 青海師范大學(xué)《創(chuàng)意圖像設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 廈門工學(xué)院《三維軟件MAYA》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北恩施學(xué)院《生物化學(xué)(B)》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江藝術(shù)職業(yè)學(xué)院《植物生理學(xué)A》2023-2024學(xué)年第二學(xué)期期末試卷
- 泉州師范學(xué)院《通風(fēng)、照明與安全工程》2023-2024學(xué)年第二學(xué)期期末試卷
- 陽泉師范高等??茖W(xué)?!秾I(yè)教育》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西機(jī)電職業(yè)技術(shù)學(xué)院《能源供應(yīng)與規(guī)模方案》2023-2024學(xué)年第二學(xué)期期末試卷
- 地鐵動力配電及照明工程施工方案
- 外泌體美容培訓(xùn)課件
- 政務(wù)號短視頻運營實踐:擺脫壁壘搭建公眾參與橋梁
- 環(huán)烯醚萜類成分分析
- GB/T 43602-2023物理氣相沉積多層硬質(zhì)涂層的成分、結(jié)構(gòu)及性能評價
- 警察防詐知識講座
- 《鼠小弟的生日》
- 博士研究生入學(xué)考試題《作物生理學(xué)》
- 發(fā)展?jié)h語-初級讀寫-第一課-你好
- 管理演員管理制度
- 《無人機(jī)攝影測量》考試復(fù)習(xí)題庫(含答案)
評論
0/150
提交評論