本篇文章描述下如何實現(xiàn)一個多文件下載任務(wù)管理的示例。

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),康樂企業(yè)網(wǎng)站建設(shè),康樂品牌網(wǎng)站建設(shè),網(wǎng)站定制,康樂網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,康樂網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
基本思路:向下載任務(wù)進行模型封裝
同時下載多個文件,將一個任務(wù)相關(guān)聯(lián)的所有數(shù)據(jù)對象封裝到一個模型對象中,方便管理
“下載任務(wù)”模型對象中的屬性封裝
1)下載任務(wù)的URL
@property (nonatomic, strong, readonly) NSURL * url;
2)下載任務(wù)的狀態(tài)
typedef enum {
NMDownloaderStateDownload, //正在下載
NMDownloaderStateCompleted, //下載完成
NMDownloaderStatePause, //暫停下載
NMDownloaderStateFailed //下載失敗
}NMDownloaderState;
@property (nonatomic, assign) NMDownloaderState state;3)下載任務(wù)
@property (nonatomic, strong) NSURLSessionDownloadTask * dTask;
5)任務(wù)斷點信息
@property (nonatomic, strong) NSData * resumeData;
6)下載進度信息
@property (nonatomic, strong) NSProgress * progress;
“下載任務(wù)”封裝的方法
1)創(chuàng)建方法
+ (NMDownloader *)downloaderWithUrl:(NSURL *)url
{
return [[NMNetworkMusicDownloader alloc] initWithUrl:url];
}
- (instancetype) initWithUrl:(NSURL *)url
{
if ( self = [super init] ) {
//使用NSURLSession創(chuàng)建下載任務(wù)并啟動
//傳入progress并成為觀察者
}
return self;
}2)觀察者響應(yīng)方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
{
if( object ==self.progress && [keyPath isEqualToString:@"fractionCompleted"] ) {
NSNumber * new = change[@"new"];
CGFloat n = new.doubleValue;
//n即為當(dāng)前的下載進度,可以通過代理將這個進度傳遞給UI元素以顯示
}
}3)下載控制器通過更改下載狀態(tài)實現(xiàn),重寫setter方法
- (void)setState:(NMownloaderState)state
{
_state = state;
if ( _state == NMDownloaderStateDownload ) {//下載
if ( self.resumeData != nil ) {
//根據(jù)resumeData創(chuàng)建下載任務(wù)
}
[self.dTask resume]; //開始下載
}
else if ( _state == NMNetworkMusicDownloaderStatePause ) {//暫停
[self.dTask cancelByProducingResumeData:^(NSData * _Nullable resumeData) {//斷點
self.resumeData = resumeData;
}];
}
//可以使用代理/通知將下載任務(wù)狀態(tài)改變的信息通知到UI元素
}定義下載任務(wù)管理類
管理類應(yīng)當(dāng)是一個單例對象
1)管理所有的下載任務(wù)
/** 下載任務(wù)數(shù)組 */ @property (nonatomic, strong) NSArray * downloaderArray;
2)提供方法添加/刪除下載任務(wù)
- (void) addDownloader:(NMNetworkMusicDownloader *) downloader; - (void) removeDownloader:(NMNetworkMusicDownloader*) downloader;
UI的顯示的說明
由于下載任務(wù)的UI顯示是需要實時更新的,將一個下載任務(wù)的顯示封裝成一個視圖對象
更新的數(shù)據(jù)包括:下載進度、下載狀態(tài)
"下載任務(wù)"模型對象,通過代理將下載進度、下載狀態(tài)的變化 傳遞給這個視圖對象,視圖對象更新UI
文章標題:iOS網(wǎng)絡(luò)開發(fā)(9)多文件下載任務(wù)管理
文章轉(zhuǎn)載:http://www.chinadenli.net/article4/jdhioe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、外貿(mào)建站、網(wǎng)站制作、移動網(wǎng)站建設(shè)、建站公司、營銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)