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開發(7)WKWebView載入本地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.在建立