1. 程式人生 > >iOS開發(OC)——iOS原生API實現檔案下載

iOS開發(OC)——iOS原生API實現檔案下載

新建繼承NSObject類Downloader
Downloader.h程式碼

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>



//@class Downloader;

typedef void(^Success)(NSMutableData *data,NSString *name);
typedef void(^Failure)(NSError *error);


@protocol ProGress <NSObject>

-(void)postPro:(CGFloat)pro;//代理實現進度傳遞
@end @interface Downloader : NSObject <NSURLConnectionDataDelegate> { long long _length;//檔案大小 NSMutableData *_datas; long long _currenLenght;//當前下載的檔案大小 } @property (nonatomic, assign) long long length; @property (nonatomic, strong) NSMutableData *datas; @property (nonatomic, copy) Success success; @property
(nonatomic, copy) Failure failure; @property (nonatomic, strong) NSString *strURL; @property (nonatomic,strong)NSString *fileName; @property (nonatomic,assign)id<ProGress>proDelegate; - (void)asynchronousDownload:(NSString *)url failure:(Failure)failure; @end

Downloader.m程式碼

//
//  Downloader.m
// QNNSEC // // Created by chenp on 16/5/25. // Copyright © 2016年 chenp. All rights reserved. // #import "Downloader.h" @implementation Downloader - (void)asynchronousDownload:(NSString *)strURL { _currenLenght=0; self.strURL = strURL; NSURL *url = [NSURL URLWithString:[strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10]; [NSURLConnection connectionWithRequest:request delegate:self]; } - (void)asynchronousDownload:(NSString *)url failure:(Failure)failure { self.failure = failure; [self asynchronousDownload:url]; } - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { _length = response.expectedContentLength; _datas = [NSMutableData dataWithCapacity:_length]; self.fileName= [response suggestedFilename]; } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { _currenLenght+=data.length; [self.datas appendData:data]; if (self.proDelegate && [self.proDelegate conformsToProtocol:@protocol(ProGress)]) { [self.proDelegate postPro:(CGFloat)_currenLenght/(CGFloat)_length]; } } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"--->> Downloader 下載完成"); self.success(self.datas,self.fileName); } - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { self.failure(error); } @end

相關推薦

iOS開發OC——iOS原生API實現檔案下載

新建繼承NSObject類Downloader Downloader.h程式碼 #import <Foundation/Foundation.h> #import <UIKit

iOS開發OC——二維碼掃描原生API,支援條形碼

今天,我為大家介紹一下iOS原生API實現二維碼和條形碼掃描功能 主要程式碼如下 //獲取攝像裝置 AVCaptureDevice * device = [AVCaptureDevi

iOS開發OC——文字的自適應高度和行間距的設定

在開發過程中,會編寫一些詳情頁,有關詳情的介紹一般都比較長,但是由於是最後一個頁面了,所以需要全部顯示,這時就需要用到自適應高度,讓文字自動換行。 首先建立label,把frame設定為CGRectMake(0, 0, 0, 0) UILabel *la

iOS開發OC——圖片瀏覽器本地圖片和網路圖片都可以用

PictureSacnViewController *picVC=[PictureSacnViewController new]; NSMutableArray *array=[NSMuta

iOS開發之網路程式設計--4、NSURLSessionDataTask實現檔案下載(離線斷點續傳下載)

前言:根據前篇《iOS開發之網路程式設計--2、NSURLSessionDownloadTask檔案下載》或者《iOS開發之網路程式設計--3、NSURLSessionDataTask實現檔案下載(離線斷點續傳下載)》,都遺留了一個細節未處理的問題,那就是在離線斷點下載的過程中,當應用程式重新啟動之後,進度

iOS開發Swift——Swift和OC的互用

新建Briding-header.h Briding-header.h是Swift和OC的橋接檔案,沒有是不行的 如何新建:一般情況,在Swift工程中新建一個OC類,或者在OC工程新建一個Swift類,系統就會提示你是否建立,選擇是就行了,然後再刪除你剛

OpenCV iOS開發——安裝(轉)

osi ctu ren png object-c 下載 eww load 信息 OpenCV是一個開源跨平臺的的計算機視覺和機器學習庫,可以用來做圖片視頻的處理、圖形識別、機器學習等應用。本文將介紹OpenCV iOS開發中的Hello World起步。

iOS開發swift:UIScrollView使用詳解

參考資料:https://blog.csdn.net/wwc455634698/article/details/52669946 //建立滾動檢視         let scrollView = U

iOS開發swift:頁面跳轉之設定第一次執行的介面

0.介面回顧   1.在AppDelegate檔案中新增如下程式碼 import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate {

iOS開發swift:頁面跳轉傳值

副標題:.xib檔案的介面與.storyboard的介面相互跳轉 一、.storyboard檔案的介面跳轉到.xib檔案的介面 0.回顧:沿用上一篇文章裡.storyboard的介面。現在要實現點選綠色介面(.storyboard)按鈕跳轉至新的藍色介面(.xib)。 1.下面

iOS開發swift:Aspect Fill 和 Aspect Fit 等的區別

參考資料:https://blog.csdn.net/henanzhg/article/details/50765903?utm_source=blogxgwz6 當我們需要在UIImageView中新增圖片的時候,在UIImageView的屬性編輯欄中有Mode選項欄中有很多種圖片的填充方式,

iOS藍芽開發在裝置端實現Central角色

若想在裝置上實現Central角色的功能,主要有以下步驟: 2.搜尋周圍廣播的裝置 3.與一個外設進行連線,並探索外設提供的服務 4.向外設傳送讀寫characteristic的請求,如果有需要訂閱characteristic值得更新,來跟蹤資料的變化。 myCe

iOS開發Swift——Button的使用

var button = UIButton(type:UIButtonType.system) //var button = UIButton(type:UIButtonType.custom) //b

iOS開發swift:計算器

# xcode如何複製控制元件 # alt + 滑鼠按住控制元件拖拽 ******************************************************************** # 把控制元件定義為後臺變數 # 滑鼠右鍵按住左側控

IOS開發7WKWebView載入本地HTML、CSS、JS檔案JS解決html內訪問其他資源路徑問題

這段時間開發IOS應用,自己本身是搞java web 和 android,搞ios應用後面還有好多坑要跳,所以學習一點就整理一點筆記。不敢保證內容都是對的,但至少,我嘗試過分析整理的。 UIWebVIew和WKWebView都是ios提供的web控制元件。但是

iOS開發1:設置APP的圖標與啟動圖 | iOS圖標的尺寸 | LaunchScreen的使用

覆蓋 自己 命名 -c 啟動圖 使用 不生效 分享 xcod 每個APP都應該有自己的圖標跟啟動圖。 這裏介紹怎麽設置iOS的APP的圖標跟啟動圖。 (1)圖標 小程的xcode是10.0版本,設置圖標的入口如下: 點擊入口後,進到設置頁面,如下: 可以看到有很多空位,

IOS開發54之Storyboard之傳值

1 前言 上一次我們介紹了Storyboard的簡單建立方法,這次我們來介紹一下如何通過Storyboard進行兩個ViewController之間的傳值。 2 程式碼例項 2.1 新建一個不帶nib檔案ViewController檔案 2.2 將Storyboard

IOS開發90之動畫檢視的旋轉

1 前言 今天我們來學習如何建立一個旋轉仿射變換並使用 UIView 類的動畫方法來執行旋轉動作。 2 程式碼例項 ZYViewController.m - (void)viewDidLoad { [super viewDidLoad]; UIImage *

springmvc學習筆記21——Servlet原生ApI作為引數

使用Servlet原生API作為引數 在前面的筆記中,已經介紹了使用RequestParam註解和POJO來傳遞引數,但是有時候我們也需要使用到Servlet原生的API,例如HttpServletRequest 和HttpServletResponse 等。該怎麼使用呢?看下面程式碼:&nbs

最新基於高德地圖的android進階開發1獲取 Map API Key

1.本應用是基於高德地圖的開發為了是能呼叫MAP服務,後面的開發中會公開github原始碼地址。 2.為了應用程式中呼叫第三方Map服務,必須獲取第三方的Map服務的API Key,所以首先在高德官網上註冊賬號,並建立應用如下圖中所示 3.在建立