Snail—iOS網絡學習之得到網絡上的數據
阿新 • • 發佈:2017-05-21
interface rms task conn log esp self. 響應 url
在開發項目project中,尤其是手機APP,一般都是先把界面給搭建出來。然後再從網上down數據 來填充
那麽網上的數據是怎麽得來的呢,網絡上的數據無非就經常使用的兩種JSON和XML
如今 大部分都是在用JSON
網絡上數據傳輸都是以二進制形式進行傳輸的 ,僅僅要我們得到網上的二進制數據
假設它是JSON的二進制形式 那麽我們就能夠用JSON進行解析 假設是XML。那麽我們能夠用XML解析
關鍵是怎麽得到網上的二進制數據呢
設計一個經常使用的工具類 非常easy 給我一個接口(URL),那我就能夠用這個類得到二進制文件
新建了一個類WJJHttpReques 繼承NSObject
以下是.h的代碼
#import <Foundation/Foundation.h> @interface WJJHttpRequest : NSObject //請求的接口 @property (nonatomic,copy) NSString * httpUrl; //網上下載的二進制文件 @property (nonatomic,strong) NSMutableData * data; //代理 @property (nonatomic,strong) id delegate; //代理的方法 @property (nonatomic,assign) SEL method; //開始下載數據 - (void)start; //斷開連接 - (void)stop; @end
#import "WJJHttpRequest.h" #import "WJJRequestManager.h" @interface WJJHttpRequest ()<NSURLConnectionDataDelegate>{ //聲明connection為全局變量 NSURLConnection * _connection; } @end @implementation WJJHttpRequest //開始下載數據 - (void)start{ NSURL * url = [NSURL URLWithString:self.httpUrl]; NSURLRequest * request = [[NSURLRequest alloc] initWithURL:url]; //僅僅要以下運行 那麽代理方法就會運行了 然後開始從網上down數據 _connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; } #pragma mark NSURLConnectionDataDelegate method //收到server的響應調用的代理方法 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ NSLog(@"收到server響應"); if (self.data == nil) { self.data = [[NSMutableData alloc] init]; }else{ [self.data setLength:0]; } } //接受server的二進制文件 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ NSLog(@"接受到了server的二進制數據"); [self.data appendData:data]; } //假設成功了 參數就是YES 反之則是NO - (void)loadFinished:(BOOL)success{ if (!success) { [self.data setLength:0]; } //檢測要接收數據的回調對象 是否有method這種方法 if ([self.delegate respondsToSelector:self.method]) { //假設有就運行這種方法 而且把自己當參數傳過去 [self.delegate performSelector:self.method withObject:self]; } //這個是我自己設計的Request管理類 以下這句話的意思就是把 數據傳給那些須要數據的地方後,把這個連接斷開 [[WJJRequestManager sharedManager] removeTask:self.httpUrl]; } //接受數據完畢時調用的方法 - (void)connectionDidFinishLoading:(NSURLConnection *)connection{ NSLog(@"數據接受完畢"); [self loadFinished:YES]; } //接收數據失敗時調用的方法 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ NSLog(@"數據請求失敗"); [self loadFinished:NO]; } //停止下載數據 - (void)stop{ if (_connection) { //取消連接 [_connection cancel]; } _connection = nil; } @end
Snail—iOS網絡學習之得到網絡上的數據